动态访问XML子节点E4X ActionScript 3



我想创建一个需要动态访问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

您可能只需要:

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

假设它们在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也会做同样的事情。

您想要使用E4X括号运算符,也称为过滤器。还可以使用通配符运算符返回所有子项。非常强大,它将允许您使用字符串进行搜索。

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

最新更新