Динамический доступ к дочерним узлам XML E4X ActionScript 3 - PullRequest
0 голосов
/ 03 февраля 2012

Я хочу создать служебную функцию, которая требует динамического доступа к дочерним узлам XML.

Пример 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. Есть идеи?

Спасибо

Victor

Ответы [ 3 ]

1 голос
/ 03 февраля 2012

Вам, вероятно, просто нужно:

 var nodeName:String = "lt";
 var xList:XMLList = xml.descendants( nodeName );
1 голос
/ 03 февраля 2012

Вы хотите использовать операторы E4X в скобках, также называемые фильтрами.А также используйте оператор подстановки для возврата всех детей.Очень мощный, он позволит вам искать, используя строку.

trace("trace",xml..*.(localName() =='lt'));
1 голос
/ 03 февраля 2012

Предполагая, что все они имеют одинаковую глубину в вашем 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 сделал бы то же самое, кстати.

...