6

我有一个非常简单的场景,我有一个类似于这个的结构

<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"))

但这当然行不通。

在不使用任何额外逻辑的情况下提取这些数据的正确方法是什么?

4

3 回答 3

3

XmlData.tour.destinations.destinationXMLList。它包含 XML,看起来像<destination>Milan</destination>Each these XMLhave name= destination,所以你什么也得不到。

试试这个:

XmlData.tour.(destinations.destination.children().contains("Milan"));
于 2012-12-17T15:05:07.810 回答
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 标准,应该可以按照问题中的方式进行操作。

于 2012-12-17T14:07:08.693 回答
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));
于 2012-12-17T13:34:06.067 回答