はじめに
かつては、テキストの汎用フォーマットといえばXMLでしたが
最近はJSONで良いのでは、という所が多くなってきている気がします。
忘れない為のサンプルコードです。
構文解析
「Msxml2.DOMDocument」オブジェクトから、load
又はloadXML
メソッドでDOM化出来ます。
ノードの取り方は、XPath形式selectSingleNode
や、タグ名getElementsByTagName
などで取得出来ます。
// XML
var xml = "<?xml version='1.0'?>\r\n"
+ "<root>\r\n"
+ " <aaa attr='rtta'>111</aaa>\r\n"
+ " <bbb>\r\n"
+ " <ccc>222</ccc>\r\n"
+ " </bbb>\r\n"
+ " <bbb>\r\n"
+ " <ccc>333</ccc>\r\n"
+ " </bbb>\r\n"
+ "</root>\r\n";
// DOMオブジェクト生成
var dom = new ActiveXObject("Msxml2.DOMDocument");
// 同期化
dom.async = false;
// パース
dom.loadXML(xml);
// ファイルの場合
// dom.load(path);
// 結果判定
if (dom.parseError.errorCode == 0) {
// XML出力
WScript.Echo(dom.xml);
// aaaタグ取得
var aaa = dom.selectSingleNode("//root/aaa");
// 属性値取得
WScript.Echo(aaa.getAttribute("attr"));
// ルート取得
var root = dom.documentElement;
// タグ名がbbbのエレメント取得
var elements = root.getElementsByTagName("bbb");
// エレメント数分ループ
for (var i = 0; i < elements.length; i++) {
// エレメント取得
var element = elements[i];
// 子取得
var child = element.firstChild;
// このタグ名とテキスト表示
WScript.Echo(child.nodeName + ":" + child.text);
}
} else {
// パース失敗の場合
WScript.Echo("parseError:" + dom.parseError.errorCode);
}
生成
「Msxml2.DOMDocument」オブジェクトから、XML宣言createProcessingInstruction
やノードcreateElement
を生成し階層のとおりに、追加appendChild
していきます。
// DOMオブジェクト生成
var dom = new ActiveXObject("Msxml2.DOMDocument");
// XML宣言部分生成
var head = dom.createProcessingInstruction("xml", "version='1.0'");
// XML宣言部分設定
dom.appendChild(head);
// ルート生成
var root = dom.createElement("root");
// aaaタグ生成
var aaa = dom.createElement("aaa");
// aaaタグ属性設定
aaa.setAttribute("attr", "rtta");
// aaaタグテキスト設定
aaa.text = "111";
// aaaタグをルートに追加
root.appendChild(aaa);
// アイテム数分ループ
var items = ["222", "333"];
for (var i = 0; i < items.length; i++) {
// bbbタグ生成
var bbb = dom.createElement("bbb");
// cccタグ生成
var ccc = dom.createElement("ccc");
// cccタグテキスト設定
ccc.text = items[i];
// bbbタグにcccタグを追加
bbb.appendChild(ccc);
// bbbタグをルートに追加
root.appendChild(bbb);
}
// DOMにrootを追加
dom.appendChild(root);