jQuery を WSH で使用しXMLを検索 変更する方法

更新日:

jQueryのDOM制御は強力です。

WSH等、ローカルのバッチを起動した際に、
XMLの解析や変更ができればいろいろと便利です。

いろいろ調べてみると簡単に実装できたので、記事として残しておきます。

jQueryを使えるように準備する

WSHでjQueryを使用できるようにするには、3ステップ必要です。

○事前処理(preUsejQuery.js)
・documentオブジェクトを作成
・windowオブジェクトの代替
・各種関数をラップ

○jQueryの登録(jQuery.js)
XMLの読み込みに関して、Ver.1.4.0 ~ 1.12.4 の動作を確認しています。

○代替変数の登録(postUsejQuery.js)
・jQuery、$オブジェクトの代替

jQueryの登録は、スクリプトの読み込みだけなので説明は省略します。

事前処理

jQueryのバージョンを変更する事も考慮し、この処理だけで一つのスクリプトファイルとします。preUsejQuery.js とでもしましょうか。

(function(){
  // documentオブジェクトを作成
  document = new ActiveXObject( "htmlfile" );
  document.write("<html></html>");

  window    = document.parentWindow;
  location  = window.location;
  navigator = window.navigator;
  window.ActiveXObject = ActiveXObject

  // 関数の代替え
  alert         = function( str ){ return window.alert( str ); };
  confirm       = function( str ){ return window.confirm( str ); };

  setInterval   = function( code, interval ){ return window.setInterval( code, interval ); };
  clearInterval = function( id ){ window.clearInterval( id );	};
  setTimeout    = function( code, delay ){ return window.setTimeout( code, delay ); };
  clearTimeout  = function( id ){ window.clearTimeout( id ); };

  // Ver.1.10.2 で発生したエラー対応
  document.documentElement.contains = function(e){return document.documentElement.contains(e)}
})();

代替変数の登録

単純に、「jQuery」、「$」という変数が定義されていないので、
呼び出しやすいように定義するだけです。
つまり、必要ない!という方は、このコードは無視してOKです。

jQuery = window.jQuery;
$      = window.$;

WSHでjQueryを使用しXMLを解析する

上記で作成したjsファイル2つで、jQueryファイルを挟んで読み込めば、使用可能となります。

sample.xml

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <testTag>
    <comment>あ</comment>
  </testTag>
  <testTag>
    <comment>い</comment>
  </testTag>
  <testTag>
    <comment>う</comment>
  </testTag>
  <testTag>
    <comment>え</comment>
  </testTag>
  <testTag>
    <comment>お</comment>
  </testTag>
</root>

test.wsf

<job>
<script language="JavaScript" src="preUsejQuery.js"></script>

<!--
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
-->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

<script language="JavaScript" src="postUsejQuery.js"></script>

<script language="JavaScript">
  // xml読み込み
  var xml = new ActiveXObject("Microsoft.XMLDOM");
  xml.async = false;
  xml.load("sample.xml");

  // xmlをjQueryオブジェクトに
  var $xml = $(xml);
  alert( $xml.text() );
</script>
</job>

WSHでjQueryを使用しXMLを保存する

今回読み込みを、XMLDOMで読み込んだ事には、意味があります。

var xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.load("sample.xml");

通常jQuery関数での読み込みの場合は、文字コードがUTF-8でなくてはいけないこと。
それと、HTML DOMとして作成される為、もちろんセーブ関数が存在しないからです。

$xml.find("comment").text("か");
alert( $xml.text() );
$xml[0].save( "sample_change.xml" );

jQuery Objectは、単純に元のDOMオブジェクト群をラップしているにすぎないので、

var xml = new ActiveXObject("Microsoft.XMLDOM");

の「var xml」には、「load」、「save」関数が存在する為、
その関数を呼び出しただけです。

WSHでjQueryを使用しXMLに新たにDOMを追加する

jQueryであれば、以下のように可能ですが

$xml.find("root")
      .append( "<testTag>" );

これでは、saveコマンドが通りません。
それはDOMオブジェクトの種類が違うからです。正しくは、

$xml.find("root")
      .append( xml.createElement("testTag") );

とする必要があり、XML DOMオブジェクトとしてappendするわけですね。

今回のsample.xmlで、新規に「<testTag>」を追加しようとした場合は、

// testTag を作成
var $tag = $( xml.createElement("testTag") );

// commentタグを作成し、上記testTagに追加
var $comment = $( xml.createElement("comment") ).appendTo( $tag );
$comment.text( "げ" ); // テキストを書き換える

// 任意の場所にDOMを追加
$xml.find("root").append( $tag );

書き方は、雑ですが、こんな感じですね。
注意すべきは、DOMの生成時に、「createElement」を使用するという事だけです。

これで説明は終了です。

-jQuery
-, ,

Copyright© 打ち聞かせ , 2021 All Rights Reserved Powered by STINGER.