【问题标题】:Inheriting XML files and modifying values继承 XML 文件和修改值
【发布时间】:2012-04-01 10:24:54
【问题描述】:

这是一个关于概念的问题。

我有一个 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>

而且它仍然非常简单。当我想删除一个节点或处理 XML 列表(如 tags 节点)时,问题就出现了。

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

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

但我对我的解决方案不满意。我对 XSLT 或其他 XML 转换工具一无所知,但我想以前一定有人做过。

我正在寻找的关键目标是易于手动编写 XML(基础和 “扩展”)。

我对 XML 之外的新解决方案持开放态度,如果它们易于手动编写的话。

感谢阅读。

【问题讨论】:

    标签: xml actionscript-3 xslt xml-parsing


    【解决方案1】:

    以下内容可为您提供指导。 XSLT 可以将一种 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)并且对(任何)标签元素中的第一个标签元素不做任何事情。

    我希望这将帮助您转换您的 XML。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-30
      相关资源
      最近更新 更多