这是关于概念的问题。
我有 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以外的新解决方案。
感谢阅读。
答案 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。