sax-jsを使うためにnode.jsをWindows 10に導入した

IT
スポンサーリンク

(あ)です。今回は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に「環境ごとコピーできそう」と思ったことも大きな理由。

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で試せばよかったのかも。

コメント

タイトルとURLをコピーしました