我有一个包含25个元素的XML文件。我只想转换2个元素并保留剩余的XML。有人可以告诉我该怎么做。在线的所有例子都是整个修改xml doc,我不想要这个。我只想修改两个元素的值。
答案 0 :(得分:8)
使用
的身份转换模板解决了这些任务<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
然后为要更改的元素添加模板,例如
<xsl:template match="foo">
<bar>
<xsl:apply-templates select="@* | node()"/>
</bar>
</xsl:template>
将foo
更改为bar
元素和/或
<xsl:template match="foobar"/>
删除foobar
元素。
为了给您提供进一步的示例,例如,如果我们想要复制baz
元素及其内容但想要添加new
元素,我们可以添加模板
<xsl:template match="baz">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
<new>...</new>
</xsl:copy>
</xsl:template>
只要您将身份转换保持活动状态(使用apply-templates),就可以通过为每个要更改的元素编写模板来很好地构建样式表。
答案 1 :(得分:0)
下面的一个实际示例,我解析xsd文件并从中删除所有注释。
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<!-- copy all nodes and attributes -->
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<!-- but remove annotations -->
<xsl:template match="xs:annotation"/>