ECMAScript for XML (E4X)

XMLをプリミティブ型として扱える

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オブジェクトを生成する

文字列から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);
}

XMLに子ノードや属性を追加する

子ノードや属性を追加することができる。

var xml = <root>
            <node1>foo</node1>
          </root>;

Debug.print("追加前: " + xml.toString());

xml.addedNode = "bar";
xml.addedNode.@id = "baz";

Debug.print("追加後: " + xml.toString());

XMLのノードを削除する

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の一部を変数にする

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());