Asial Blog

Recruit! Asialで一緒に働きませんか?

E4Xのまとめ-その2-

カテゴリ :
フロントエンド(HTML5)
タグ :
Flex
AS3
E4X
Tech
XML
こんにちは。Flex大好き橋本です。

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

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

  1. //例
  2. var xml:XML = <root>
  3.   <hoge>hoge1</hoge>
  4.   <fuga>
  5.     <hoge>hoge2</hoge>  
  6.   </fuga>
  7. </root>;
  8.  
  9. //前回あったとおり、「.」を使うと、直接の子ノードを取得することができます。
  10. var a:XMLList = xml.hoge;
  11. for each (var b:XML in a) {
  12.   trace(b); //hoge1
  13. } 
  14.  
  15. //「..」を使うと、「.」とは異なり、直接の子ノードだけではなく、すべての子孫ノードを取得することができます。
  16. var a:XMLList = xml..hoge;
  17. for each (var b:XML in a) {
  18.   trace(b); //hoge1, hoge2
  19. }

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

  1. //例
  2. var xml:XML = 
  3.     <root>
  4.         <member id="1">
  5.             <name>akifumi</name>
  6.             <job>engineer</job>
  7.         </member>
  8.         <member id="2">
  9.             <name>tarou</name>
  10.             <job>analyst</job>
  11.         </member>
  12.     </root>;
  13.  
  14. // ノードの値でフィルタリング
  15. trace(xml.member.(name == "akifumi")); // 一つめの<member>ノードを取得
  16.  
  17. // 属性値でフィルタリング
  18. trace(xml.member.(@id == 2)); // 二つめの<member>ノードを取得
  19. trace(xml.member.(@id <= 1)); //不等号を使うことも可能。この場合は、一つめの<member>ノードを取得
  20.  
  21. // 正規表現によるマッチングを利用することもできます。
  22. var regexp:RegExp = new RegExp("engineer");
  23. 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
<
default xml namespace ディレクティブを利用することで、デフォルトのnamespaceを指定することもできます。

  1. var xml:XML = <root xmlns:hoge="http://hogehoge.hoge" xmlns:fuga="http://fugafuga.fuga">
  2.   <fuga:name>aaaa</fuga:name>
  3.   <hoge:name>bbbb</hoge:name>
  4. </root>;
  5.  
  6. // デフォルトnamespaceを設定
  7. var ns1:Namespace = new Namespace("http://hogehoge.hoge");
  8. default xml namespace = ns1;
  9.  
  10. trace(xml.name); // bbbb
  11.  
  12. // デフォルトnamespaceを切り替え
  13. var ns2:Namespace = new Namespace("http://fugafuga.fuga");
  14. default xml namespace = ns2;
  15.  
  16. trace(xml.name); // aaaa

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