2016-08-02 17 views
0

我已經加載了一個外部XML並將其存儲在一個變量中。現在我有另一個字符串變量(動態),其中包含特定節點的路徑。我需要根據變量中的路徑找到節點的值。根據變量中的子項獲取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 

但它不工作。

回答

1

你應該用點與var feedArr:Array = feedRef.split(".")分割你的字符串,然後通過你的合成陣列循環下來xml[feedArr[i]]這不是XMLXMLList(或空)然後讓每個孩子按順序獲得下一個財產,等等。一個例子,假設有史以來只有一個請求的輸出:

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()); 
1

我想你要找的是什麼:

feedXML.child(feedRef); 

如果你想全稱爲「標題」的節點,那麼你可以做一個遞歸函數:

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

+0

feedXML.child(feedRef);僅適用於第一級兒童。但是這裏的「feedRef」var可以有n級的孩子。如:「channel.item.title」 – Gaurav

+0

標題可以是多個節點的屬性。如果它是channel.item.title,那麼它就是文章的標題,如果它只是channel.title,那麼它就是頻道的標題。你想要檢索什麼標題? – evilpenguin

+0

feedRef實際上可以是「channel.title」或「child.item.title」 – Gaurav