2012-02-02 2 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'/> 

Это прекрасно работает, однако, мне нужно, чтобы получить доступ к узлу «лт» не зная имя фронт. Например ...

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

Я надеялся сделать это без использования цикла for. Есть идеи?

Спасибо,

Виктор

+1

Ничего. Я понял это и поставил бы его как ответ, но мне пришлось ждать 8 часов. Но в случае, если кто-то еще ищет, синтаксис выглядит следующим образом: 'var xList: XMLList = новый XMLList (xml.descendants (node));' –

+0

Ах, вы все равно это сделали. Но я не думаю, что вам нужно будет использовать «новый 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) –

Смежные вопросы