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