我已加载外部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
但它不起作用。
答案 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]]
而不是XML
但XMLList
(或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());