(あ)です。今回はnode.js+sax-jsな話です。
なぜsaxか
DOMではロードできないXMLファイルの解析する必要があり、sax使えばどうにかなるかな、と思った。対象はWindowsのタスクスケジューラの設定を以下のコマンドで出力したもの。
schtasks /query /xml > output.txt
出力されたoutput.txtを抜粋すると以下のとおり。
<Tasks>
<?xml version="1.0" encoding="UTF-8"?>
<Task>
...
</Task>
<?xml version="1.0" encoding="UTF-8"?>
<Task>
...
</Task>
</Tasks>
これではDOMは無理…
前後するが、sax-jsの説明What This isにも次の説明があった。
A handy way to deal with RSS and other mostly-ok-but-kinda-broken XML docs.
なぜjavascriptか
Windowsなので、WSH(のJScript)とnode.jsが選択肢となり、node.jsを選んでみたというのが理由。また、以下のサイトでインストールしないnode.jsの導入の仕方を紹介されており、背中を押された。これなら、メンバーのPCに「環境ごとコピーできそう」と思ったことも大きな理由。
- Cottpicさん:Node.js & npm をインストーラー無しで 手軽にはじめる
JScript
ちなみに、JScriptについてはWikipediaの説明には以下のとおり記載がある。
JScript(ジェイ・スクリプト)は、マイクロソフト製のスクリプト言語であり、Microsoft Windows 上で動作する。JavaScriptと類似しており、Internet Explorerを使用したクライアントサイドスクリプティング処理、および Internet Information Services (IIS) などを使用したサーバサイドスクリプティング処理を記述することができる。また、Windows Script Host (WSH) を利用することで、Windows上でのバッチ処理を記述することができる。拡張子は、通常 .js を使用する。
類似しているが同じではないため、違いを把握してコーディングする必要があり、そこがストレスでもある。デバッグの際、コード自体のBugなのかJScriptだから動かないのかを、気にする必要がある。
ただ、WSH上のJScriptで動けばさらにポータブルなので、node.jsでうまくいけば考えてみよう。
sax-jsのexample.jsを動作させる
node.js導入
CottpicさんのNode.js & npm をインストーラー無しで 手軽にはじめるを参照して導入した。とくに引っかかることもなく、スムーズに導入完了できた。Cottpicさん、ありがとうございます。
node.js導入後のフォルダ構成
C:
└Dev
└─node-v12.14.0-win-x64
└─node_modules
sax-js導入
sax-jsのサイトを確認。導入方法が見つからなかったので、「sax-js npm」で検索したところnpmjsを見つけた。ページ内に導入用のコマンドが記載されていた。以下のとおりなので、説明どおりコマンドを実行した。
npm i sax
sax-js導入後のフォルダ構成
C:
└Dev
└─node-v12.14.0-win-x64
└─node_modules
└─sax
└─lib
example.jsを動作させるまで
example.jsを配置するフォルダを作成した。schtasks-anaフォルダ内にexample.jsのコードをコピーして配置した。
C:
└Dev
└─node-v12.14.0-win-x64
├─node_modules
│ └─sax
│ └─lib
└─schtasks-ana
まずは実行
node example.js
エラーが発生した。
Error: Cannot find module '../lib/sax'
saxがrequireできるように修正
sax = require('../lib/sax'), // original
sax = require('sax'), // 修正
再度実行すると、次のエラーが起きた。
TypeError: (intermediate value)(...) is not a function
メッセージの内容がまるで理解できなため、メッセージそのままでググった。このページが見つかった。「この場合1行目の文末にセミコロンがないと、TypeError例外が発生します。」とのこと。
不足?セミコロンを追記
example.jsに当てはめるとどこや?コードをながめ、18行目と想定。「;」を追記。
node example.js
sax-jsのexample.jsが動作した
とりあえず、ひと段落。
以下にexample.jsの修正した個所をVScodeのdiff機能の結果(5行目と18行目)で示す。
これから
どうにか導入ができたが、実はここまででやりたいことのスタートに立つことができただけだ。
example.jsを眺めると、JScriptにはなさそうな関数がある。まずはsax-jsのUsageのコード動作を試す必要がある。最初からUsageで試せばよかったのかも。
コメント