如何使用XSL修改XML的一小部分

时间:2012-02-08 12:18:48

标签: xml xslt

我有一个包含25个元素的XML文件。我只想转换2个元素并保留剩余的XML。有人可以告诉我该怎么做。在线的所有例子都是整个修改xml doc,我不想要这个。我只想修改两个元素的值。

2 个答案:

答案 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"/>