ECMAScript for XML (E4X)は、ネイティブXMLサポートをECMAScriptに出力するプログラミング言語拡張である。
E4Xでは、XMLをプリミティブ型として扱うことができる。
var xml = <root>
<node attr="0">foo</node>
</root>;
Debug.print(xml.node);
Debug.print(xml.node.@attr);
Debug.print(xml.node["@attr"]);
文字列からXMLオブジェクトを生成することもできる。
var src = "<root><node attr='0'>foo</node></root>">;
var xml = new XML(src);
Debug.print(xml.node);
Debug.print(xml.node.@attr);
Debug.print(xml.node["@attr"]);
var xml = <root>
<node1>foo</node1>
<node1>bar</node1>
<node2 num="0">baz</node2>
<node2 num="1">
<node2Child>qux</node2Child>
</node2>
</root>;
var children = xml.children();
var children2 = xml.*;
for (var prop in children) {
Debug.print("children[" + prop + "]=" + children[prop]);
}
for each (var value in children2) {
Debug.print("value = " + value);
}
子ノードや属性を追加することができる。
var xml = <root>
<node1>foo</node1>
</root>;
Debug.print("追加前: " + xml.toString());
xml.addedNode = "bar";
xml.addedNode.@id = "baz";
Debug.print("追加後: " + xml.toString());
delete
演算子を用いてノードを削除することができる。
var xml = <root>
<node1>foo</node1>
<node1>bar</node1>
<node2 num="0">baz</node2>
<node2 num="1">
<node2Child>qux</node2Child>
</node2>
</root>;
Debug.print("削除前: " + xml.toString());
delete xml.node1[1];
delete xml.node2.@num;
Debug.print("削除後: " + xml.toString());
XML文の一部を変数にすることもできる。
var attrName = "code";
var tagName = "name";
var attrVal = "0001";
var content = "商品1";
var xml = <order>
<item {attrName}={attrVal}>
<{tagName}>{content}</{tagNae}>
</item>
</order>;
attrVal = "0002";
content = "商品2";
xml.appendChild(
<item {attrName}={attrVal}>
<{tagName}>{content}</{tagName}>
</item>
);
Debug.print(xml.toXMLString());
delete xml.item[1];
Debug.print(xml.toXMLString());