2012-12-17 26 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