根据变量中的子项获取XML值

时间:2016-08-02 10:46:31

标签: xml actionscript-3

我已加载外部XML并将其存储在变量中。现在我有另一个字符串变量(动态),它包含特定节点的路径。我需要根据变量中的路径找到节点的值。

外部XML加载:rss.cnn.com/rss/edition.rss (没有代理问题,它被加载到var中。我通过跟踪var来检查)

private function feedLoad(e:Event):void {
    feedXml = new XML(e.target.data);
    feedRef = "channel.title"; // (This is actually dynamic value, and can go n-level deep)
    title_txt.text = feedXml[feedRef];
}

如何根据变量引用子路径?我试过了:

feedXml[feedRef]
feedXml.feedRef

但它不起作用。

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找的是:

feedXML.child(feedRef);

如果你想要所有名为“title”的节点,那么你可以做一个递归函数:

function searchXML(xml:*):void {
    var xmlList:XMLList = xml.children();
    if (xmlList.length>0) {
        for each (var xmlItem in xmlList) {
            searchXML(xmlItem);
        }
    if (xml.name() == "title") {
        trace(xml.text());
    }
}

对不起,如果有任何错误,我现在无法对此进行测试。

有关在Actionscript 3中遍历XML的更多信息,请访问:Traversing XML structures

答案 1 :(得分:1)

您应该使用var feedArr:Array = feedRef.split(".")将字符串拆分为点,然后使用xml[feedArr[i]]而不是XMLXMLList(或null)迭代结果数组,然后让每个孩子按顺序获得下一个房产,依此类推。假设只有一个请求输出:

var xml:XML = new XML("<foo a=\"X\"><moo b=\"Y\">Moo</moo><bar c=\"Z\"><baz>Meow</baz></bar></foo>");
var foo:XMLList;
var x:XML;
var s:String = "foo.bar.baz";
var a:Array = s.split(".");
var d:XML = xml;
for (var i:int = 0; i < a.length; i++) {
    if (d) {
        foo = d[a[i]];
        for each (x in foo) d = x;
        // here it's best to recurse into X instead of using only last X
    }
}
if (d) trace("d",d.toXMLString());