XML
dom
JScript

JScriptでDOM(XML)操作

More than 5 years have passed since last update.


はじめに

かつては、テキストの汎用フォーマットといえば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);