blog.monophile.net

コンピュータのこととかのメモ。

Takaaki Yamamoto

東京工業大学において計算機科学と応用数学を学び、 情報科学芸術大学院大学[IAMAS] においてメディア表現を専攻し修了。 現在は digitiminimi Inc. において、インフラエンジニアとして生計をたててている。

work

各種システム構築と管理を承ります。

Cloud PlatformOpenstack, GCP, AWS, Azure, ...
Openstackkeystone, glance, cinder, swift, neutron, nova, ...
VirtualizationQEMU+KVM, LXD/LXC, Docker, ...
OSDebian GNU/Linux, Ubuntu, CentOS, ...
NetworksIPSec, L2TP, VXLAN, WirelessAP, ...
WebAppsWordPress, GitLab, Redmine, ...
Configuration ManagementAnsible, Terraform, ...
MonitoringNagios, Munin, ...

posts

nodejsで簡単なDOM処理

いきさつ

Webページの再構築中で、HTMLファイルの分割をしています。 最初はPythonでやっていたのですが、やっぱりWebから生まれたjavascriptで処理するのが適切かと思いnodejsでやってみました。

HTMLファイルの分割

標準入力からHTMLを表すテキストファイルを読み込み、div要素をid.txtというファイル名で書き出します。 なお、行頭の空白文字を削除する処理も行っています。

install

nodejsとnpmをMacPortsからインストールし、npmでjsdomをインストールします。

$ sudo port install nodejs npm
$ npm install jsdom

code.js

var fs = require('fs');
var jsdom = require('jsdom').jsdom;

var stdin = fs.readFileSync('/dev/stdin', 'utf8');
var document = jsdom(stdin);
var divs = document.getElementsByTagName("div");
for (var i = 0; i < divs.length; i++) {
  var d = divs[i];
  var id = d.getAttribute("id");
  var filename = id + ".txt"
  var output = d.innerHTML.replace(/^\s*/gm,"")
  fs.writeFile(filename, output)
}

input.html

<html>
<body>
  <div id="00">
    <h1>title00</h1>
    <p>paragraph00.</p>
  </div>
  <div id="01">
    <h1>title01</h1>
    <p>paragraph01.</p>
  </div>
  <div id="02">
    <h1>title02</h1>
    <p>paragraph02.</p>
  </div>
</body>
</html>

exec

実行は次のコマンドで。

$ cat input.html | nodejs code.js

ちゃんとファイルに分割できました。

00.txt

<h1>title00</h1>
<p>paragraph00.</p>

01.txt

<h1>title01</h1>
<p>paragraph01.</p>

02.txt

<h1>title02</h1>
<p>paragraph02.</p>