【问题标题】:Access XML Child Nodes Dynamically E4X ActionScript 3动态访问 XML 子节点 E4X ActionScript 3
【发布时间】:2012-02-25 14:56:13
【问题描述】:

我想创建一个需要动态访问 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 循环的情况下完成这项工作。有什么想法吗?

谢谢,

维克多

【问题讨论】:

  • 没关系。我想通了,会把它作为答案,但我不得不等待 8 个小时。但万一其他人在看,语法如下:var xList:XMLList = new XMLList(xml.descendants(node));
  • 啊,你想的差不多。但我认为你也不需要使用new XMLList

标签: actionscript-3 apache-flex actionscript e4x


【解决方案1】:

您想使用 E4X 括号运算符,也称为过滤器。并且还使用通配符运算符返回所有孩子。非常强大,它可以让你使用字符串进行搜索。

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

【讨论】:

  • 酷! var list:XMLList = xml..*.(localName() == node)
【解决方案2】:

你可能只需要:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 这也有效... var list:XMLList = xml.*[node];谢谢!
    • BTW 如何获得&lt;test&gt;c&lt;/test&gt;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多