2012-02-02 8 views
0

XML子ノードに動的にアクセスする必要のあるユーティリティ関数を作成したいと考えています。XML子ノードに動的にアクセスするE4X ActionScript 3

サンプルXML:

var xml:XML = 
<root> 
    <section> 
     <lt target='foo'/> 
     <lt target='foo1'/> 
     <lt target='foo2'/> 
    </section> 
    <section1> 
     <lt target='foo'/> 
     <lt target='foo1'/> 
     <lt target='foo2'/> 
    </section1> 
</root>; 

私はすべての「LT」は関係なく、その親ノードのノードにアクセスできるようにしたいです。通常、このようなことをするでしょう:、正常に動作します

var xList:XMLList = xml..lt; 

//Output 

xList = 
<lt target='foo'/> 
<lt target='foo1'/> 
<lt target='foo2'/> 
<lt target='foo'/> 
<lt target='foo1'/> 
<lt target='foo2'/> 

しかし、私はフロントまで名前を知らない「LT」ノードにアクセスする必要があります。たとえば...

var nodeName:String = 'lt'; 
var xList:XMLList = xml..[nodeName]; //<-- Does not work. 

私はこれをforループを使用せずに行うことを望んでいました。何か案は?

おかげで、彼らはあなたのXMLにすべて同じ深さだと仮定すると、

ビクター

+1

気にしないでください。私はそれを理解して答えにしたでしょうが、私は8時間待たなければなりませんでした。しかし、他の誰かが見ている場合、構文は次のようになります: 'xList:XMLList = new XMLList(xml.descendants(node));' –

+0

ああ、あなたはそれをかなり同じように考えました。しかし、私は 'new XMLList'を使う必要はないと思います。 –

答えて

1

あなたはおそらく必要があります。

var nodeName:String = "lt"; 
var xList:XMLList = xml.descendants(nodeName); 
1

は、ワイルドカードとして*を使用することができます。たとえば:

var xml:XML = <root> 
    <obj1> 
     <test>a</test> 
    </obj1> 
    <obj2> 
     <test>b</test> 
    </obj2> 
    <obj2> 
     <lala> 
      <test>c</test> 
     </lala> 
    </obj2> 
</root>; 
trace(xml.*.test); 

トレースアウト:

<test>a</test> 
<test>b</test> 

xml.children().testは仕方によって、同じことをするだろう。

+0

これは同様に機能します... var list:XMLList = xml。* [node];ありがとう! –

+0

ご連絡方法 c 'を取得するには? –

1

ます。また、フィルタと呼ばれるE4Xの括弧演算子を使用したいです。また、すべての子を返すためにワイルドカード演算子を使用します。非常に強力なので、文字列を使って検索することができます。

trace("trace",xml..*.(localName() =='lt')); 
+0

クール! var list:XMLList = xml .. *。(localName()== node) –

関連する問題