2012-12-17 27 views
6

我有一個非常簡單的場景,在那裏我有類似這樣如何通過ActionScript 3中的嵌套子元素值過濾xml節點?

<tours> 
    <tour> 
     <name>Italy 1</name> 
     <destinations> 
      <destination>Rome</destination> 
      <destination>Milan</destination> 
     <destinations> 
    </tour> 
    <tour> 
     <name>Italy 2</name> 
     <destinations> 
      <destination>Rome</destination> 
      <destination>Venice</destination> 
     <destinations> 
    </tour> 
</tours> 

現在我想查詢所有去米蘭的旅遊團的結構。

下面是我能想到的基於EX4風格

XmlData.tour.(destinations.destination.(name == "Milan")) 

但是,當然,這不工作的邏輯格式。

在不使用任何額外邏輯的情況下拉動這些數據的正確方法是什麼?

回答

3

XmlData.tour.destinations.destinationXMLList。它包含XML,看起來像<destination>Milan</destination>每個這些XML都有name = destination,所以你沒有得到任何結果。

試試這個:

XmlData.tour.(destinations.destination.children().contains("Milan")); 
+0

有趣的是,它與E4X文檔中的應用程序的工作方式相比,看起來有點奇怪,它有點奇怪。對於OP:我發現http://www.senocular.com/flash/tutorials/as3withflashcs3/?page=4這可能會給你提供有關在AS3中使用xml的相關詳細信息。 –

+0

它工作得很好。感謝您的幫助,謝謝。 –

0

這個腳本將幫助您創建從XMLDATA一個新的XML,但只包括旅遊目的地米蘭:

var DESTINATION_TO_CHECK:String = "Milan"; 
var i:int; 
var j:int; 
var numberOfTours:int = XmlData.tour.length(); 
var numberOfDestinations:int; 
var tours:String = "<tours to='" + DESTINATION_TO_CHECK + "'>"; 

for (i = 0; i < numberOfTours; i++) 
{ 
    numberOfDestinations = XmlData.tour[i].destinations.destination.length(); 

    for (j = 0; j < numberOfDestinations; j++) 
    { 
     if (XmlData.tour[i].destinations.destination[j] == DESTINATION_TO_CHECK) 
     { 
      tours += XmlData.tour[i]; 
     } 
    } 
} 

tours += "</tours>"; 

trace(new XML(tours)); 
1

1)格式錯誤的XML。 (關閉目的地缺少'/')

2)您似乎遇到了AS3 E4X-finder中的某種錯誤。這是很奇怪的,這裏有一個解決辦法,但...

var foo:XMLList = data.tour.destinations.(destination == "Milan"); 
trace("direct check: " + foo); //fails - 0 matches 
trace("------"); 
for each(var child:XML in data.tour.destinations.destination) { 
    if (child == "Milan") { 
     trace("found match in foreach Milan"); 
    } 
} 

進一步調查,它似乎像E4X引擎搞砸了,因爲你有相同的標識符(<destination>)標籤內的多個孩子。

打字以下,使「過濾功能」像預期的那樣:

<destinations> 
<destination2>Rome</destination2> 
<destination>Milan</destination> 
</destinations> 

....這真是奇怪......任何人誰可以在此解釋一下?因爲根據E4X的xml標準,應該可以像在問題中那樣做。

+0

很快評論到。正如@AtomicRobot所示,我已經迷失了主意:) – Avik