2016-08-02 14 views
0

Ich habe eine externe XML geladen und in einer Variablen gespeichert. Jetzt habe ich eine andere String-Variable (dynamisch), die den Pfad zu einem bestimmten Knoten enthält. Ich muss den Wert des Knotens nach dem Pfad in der Variable finden.Get XML-Wert nach Kind in Variable

Externe XML Loaded: rss.cnn.com/rss/edition.rss (. Kein Proxy-Problem, seine in var geladen Ich habe überprüft, indem die var Tracing)

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]; 
} 

Wie die referenzieren Child-Pfad nach der Variablen? Ich habe versucht:

feedXml[feedRef] 
feedXml.feedRef 

Aber es funktioniert nicht.

Antwort

1

Sie sollten Ihre Zeichenfolge durch Punkte mit var feedArr:Array = feedRef.split(".") gespalten, dann durchlaufen Ihre resultierende Array nach unten mit xml[feedArr[i]] die kein XML aber XMLList (oder null) ist, dann hol dir jedes Kind in Ordnung und hol dir die nächste Immobilie, und so weiter. Ein Beispiel, das davon ausgeht, dass nur ein angeforderter Ausgang vorhanden ist:

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

Ich denke, was Sie suchen ist:

feedXML.child(feedRef); 

Wenn Sie alle Knoten „Titel“ genannt, dann können Sie eine rekursive Funktion tun:

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

Sorry, wenn jeder Fehler, ich habe keine Möglichkeit, dies jetzt zu testen.

Mehr über eine XML in Actionscript durchqueren 3 hier: Traversing XML structures

+0

feedXML.child (feedRef); funktioniert nur für die erste Stufe des Kindes. Aber hier kann die "feedRef" -Var n-Ebene von Kind haben. Wie: "channel.item.title" – Gaurav

+0

Der Titel kann ein Attribut mehrerer Knoten sein. Wenn es channel.item.title ist, dann ist es der Titel des Artikels, wenn es nur channel.title ist, ist es der Titel des Kanals. Welche Titel möchten Sie abrufen? – evilpenguin

+0

feedRef kann "channel.title" oder "child.item.title" sowohl – Gaurav