2012-02-02 1 views
0

동적으로 XML 자식 노드에 액세스해야하는 유틸리티 함수를 만들고 싶습니다.XML 자식 노드에 동적으로 액세스하기 E4X ActionScript 3

샘플 XML :

나는 모든 'LT'를 액세스 할 수있게하려면
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>; 

에 관계없이 부모 노드의 노드. 일반적으로이 같은 것을 할 것 : 잘 작동

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 루프를 사용하지 않고이 작업을 수행하기를 바랬습니다. 어떤 아이디어?

감사합니다,

빅터

+1

신경 쓰지 마세요. 나는 그것을 알아 냈고 대답으로 써 뒀을 것이다. 그러나 나는 8 시간을 기다려야했다. 하지만 다른 사람이보고있는 경우 구문은 다음과 같습니다. 'xList : XMLList = new XMLList (xml.descendants (node)); ' –

+0

아, 너는 똑같은 걸 알아 냈어. 그러나 나는 당신이'new XMLList '를 사용할 필요가 없을 것이라고 생각한다. –

답변

1

당신은 아마 필요

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

그들이 당신의 XML로 모두 같은 깊이있어 가정하면, 당신은 와일드 카드로 *를 사용할 수 있습니다. 예를 들어 :

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

BTW ' c'을 얻는 방법은 무엇입니까? –

1

당신은 E4X 괄호 연산자라고도 필터를 사용하고 싶습니다. 와일드 카드 연산자를 사용하여 모든 하위 항목을 반환하십시오. 매우 강력합니다. 문자열을 사용하여 검색 할 수 있습니다.

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

쿨! var list : XMLList = xml .. *. (localName() == node) –