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());
このエントリーをはてなブックマークに追加