AS3:合并XML文件

时间:2010-01-15 23:56:42

标签: xml actionscript-3 merge

这里有很多关于将XML与Java合并的帖子,但我似乎找不到对同一任务的ActionScript的任何引用。

我有一组需要加载的XML文件。我希望它们在内存中排序成一个XML对象。

例如,假设这些是我的XML文件:

文件1

<xml>
    <type name="1" group="a">
        <unit> value1 </unit>
    </type>
    <type name="1" group="b">
        <unit> value2 </unit>
    </type>
    <type name="2" group="a">
        <unit> value3 </unit>
    </type>
</xml>

文件2

<xml>
    <type name="1" group="a">
        <unit> value4 </unit>
    </type>
    <type name="1" group="b">
        <unit> value5 </unit>
    </type>
    <type name="2" group="a">
        <unit> value6 </unit>
    </type>
    <type name="3" group="a">
        <unit> value7 </unit>
    </type>
</xml>

合并

<xml>
    <type name="1" group="a">
        <unit> value1 </unit>
        <unit> value4 </unit>
    </type>
    <type name="1" group="b">
        <unit> value2 </unit>
        <unit> value5 </unit>
    </type>
    <type name="2" group="a">
        <unit> value3 </unit>
        <unit> value6 </unit>
    </type>
    <type name="3" group="a">
        <unit> value7 </unit>
    </type>
</xml>

在此示例中,合并了两个文件,并将单元放在类似的类型名称和组中。

排序优先级:类型名称&gt;类型组&gt;单位价值

我希望这很清楚。请询问是否需要进一步澄清。

1 个答案:

答案 0 :(得分:2)

这适用于给定的例子。

var t1:XML, t2:XML;
var merged:XML = new XML(file1.toXMLString())
for each(t1 in merged.type)
  for each(t2 in file2.type.(@name == t1.@name && @group == t1.@group))
    t1.appendChild(t2.unit.toXMLString());
for each(t2 in file2.type)
  if(merged.type.(@name == t2.@name && @group == t2.@group).length() == 0)
    merged.appendChild(t2.toXMLString());
trace(merged.toXMLString());