E4Xのまとめ-その2-

こんにちは。Flex大好き橋本です。

今回は、前回の「E4Xのまとめ-その1-」の続きということで、子孫ノードへのアクセス、値のフィルタリング、名前空間の利用についてまとめていきたいと思います。

・子孫ノードへのアクセス。
「..」を使って、子孫ノードにアクセスすることができます。


//例
var xml:XML = <root>
<hoge>hoge1</hoge>
<fuga>
<hoge>hoge2</hoge>
</fuga>
</root>;
//前回あったとおり、「.」を使うと、直接の子ノードを取得することができます。
var a:XMLList = xml.hoge;
for each (var b:XML in a) {
trace(b); //hoge1
} 
//「..」を使うと、「.」とは異なり、直接の子ノードだけではなく、すべての子孫ノードを取得することができます。
var a:XMLList = xml..hoge;
for each (var b:XML in a) {
trace(b); //hoge1, hoge2
} 

・条件指定によるフィルタリング
「()」の中に条件を指定することによって、各ノードの値や属性値について、フィルタリングを行うことができます。


//例
var xml:XML = 
    <root>
        <member id="1">
            <name>akifumi</name>
            <job>engineer</job>
        </member>
        <member id="2">
            <name>tarou</name>
            <job>analyst</job>
        </member>
    </root>;
// ノードの値でフィルタリング
trace(xml.member.(name == "akifumi")); // 一つめの<member>ノードを取得
// 属性値でフィルタリング
trace(xml.member.(@id == 2)); // 二つめの<member>ノードを取得
trace(xml.member.(@id <= 1)); //不等号を使うことも可能。この場合は、一つめの<member>ノードを取得
// 正規表現によるマッチングを利用することもできます。
var regexp:RegExp = new RegExp("engineer");
trace(xml.member.(job.toString().match(regexp) != null)); //一つめの<job>ノードを取得

・名前空間が指定されている値の取得
Namespaceクラスを利用することで、名前空間が指定されているXMLの値を取得することが可能です。
//例
var xml:XML =
aaaa
bbbb
;

// namespaceを指定して値を取得
var ns:Namespace = new namespace("http://hogehoge.hoge");
trace(xml.name); // aaaa
trace(xml.ns::name); // bbbb
< var xml:XML = <root xmlns:hoge="http://hogehoge.hoge" xmlns:fuga="http://fugafuga.fuga"> <fuga:name>aaaa</fuga:name> <hoge:name>bbbb</hoge:name> </root>; // デフォルトnamespaceを設定 var ns1:Namespace = new Namespace("http://hogehoge.hoge"); default xml namespace = ns1; trace(xml.name); // bbbb // デフォルトnamespaceを切り替え var ns2:Namespace = new Namespace("http://fugafuga.fuga"); default xml namespace = ns2; trace(xml.name); // aaaa

以上、前回と今回の2回に渡って、簡単ですがAS3におけるE4Xの使い方をまとめてみました。
特に、フィルタリングの部分はうまく使うことで、非常に簡単に目的の値を取得することが可能になるかと思いますので、尻込みせずに、ぜひ使ってみていただけたらと思います。