继承XML文件和修改值

时间:2012-04-01 10:24:54

标签: xml actionscript-3 xslt xml-parsing

这是关于概念的问题。

我有 XML 文件,我们称之为 base

<base id="default">
    <tags>
        <tag>tag_one</tag>
        <tag>tag_two</tag>
        <tag>tag_three</tag>
    </tags>
    <data>
        <data_a>blue</data_a>
        <data_b>3</data_b>
    </data>
</base>

我想要做的是能够扩展这个 XML 在另一个文件中,修改单个属性。例如,我想继承该文件并使用不同的 data/data_a 节点创建一个新文件:

<base id="green" import="default">
    <data>
        <data_a>green</data_a>
    </data>
</base>

到目前为止,它非常简单,它用新的 data/data_a 替换旧的 <base id="ext" import="default"> <moredata> <data>extended version</data> </moredata> </base> 。我甚至可以添加一个新节点:

tags

仍然很简单。当我想删除节点或处理XML列表(如<base id="diffList" import="default"> <tags> <tag index="1">this is not anymore tag_two</tag> </tags> </base> 节点)时,就会出现问题。

我应该如何引用列表中的特定索引?我在想做类似的事情:

<base id="deleting" import="default">
    <tags>
        <tag index="2"/>
    </tags>
    <data/>
</base>

<!-- This will result in an XML containing these values: -->

<base>
    <tag>tag_one</tag>
    <tag>tag_two</tag>
</base>

删除节点/数组索引:

{{1}}

但我对我的解决方案不满意。我对XSLT或其他XML转换工具一无所知,但我认为之前必须有人这样做过。

我正在寻找的密钥目标是轻松手动编写XML(基础和“扩展”)。

如果它们易于手动编写,我会接受除XML以外的新解决方案。

感谢阅读。

1 个答案:

答案 0 :(得分:1)

以下内容可能会指导您。 XSLT可能会将一个XML转换为另一个XML。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="data_a">
        <data_a>green</data_a>
    </xsl:template>

    <xsl:template match="tags/tag[1]"/>

</xsl:stylesheet>

上述三个模板的说明:
(1)复制所有节点和属性
(2)但改变data_a节点
(3)并且对(any)标签元素中的第一个标签元素不做任何操作。

我希望这可以帮助您转换XML。