2016-08-02 20 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

あなたはその後、XMLしかしXMLList(またはnull)されていないxml[feedArr[i]]とダウンあなたの結果の配列を反復処理、var feedArr:Array = feedRef.split(".")とドットで、あなたの文字列を分割する必要があり、それぞれの子供を順番に取得し、次のプロパティを取得するなどです。一例として、これまでに要求出力が1つしかないと仮定しています。

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レベルの子を持つことができます。 Like: "channel.item.title" – Gaurav

+0

タイトルは複数のノードの属性にすることができます。それがchannel.item.titleなら記事のタイトルです。ちょうどchannel.titleならチャンネルのタイトルです。あなたは何を検索しようとしていますか? – evilpenguin

+0

feedRefは "channel.title"または "child.item.title"のいずれでもかまいません – Gaurav

関連する問題