使用xslt只更改几个XML元素,而其他元素保持不变



我在使用XSLT时有以下问题。

在XML文档中,我在不同级别的<div></div>标记中嵌入了几个<h></h>标记。

为了将所有的<h></h>分别更改为<h1></h1> <h2></h2> <h3></h3>,以使其落在不同的div部分中,我编写了以下XSLT脚本。

<xsl:template match="//TU:div/TU:h">
    <h1><xsl:apply-templates/></h1>
</xsl:template>
<xsl:template match="//TU:div/TU:div/TU:h">
    <h2><xsl:apply-templates/></h2>
</xsl:template>

依次类推. . . .问题是我希望其他一切都保持原样。我只希望<h></h>标签改变。

不幸的是,当我处理文档时,<h></h>标记按需要更改,但所有其他元素都消失了。

除了简单地为每个元素写一个<xsl:template>之外,是否还有其他解决方案来解决这个问题,以便每个给定的元素将被自己替换?

例如元素<p></p>:

<xsl:template match="//TU:p">
    <p><xsl:apply-template/></p>
</xsl:template>

我是否需要这样做来保存每个元素,或者有更好的方法?

谢谢你的帮助。

添加标识模板以匹配其他所有内容…

<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>
<xsl:template match="TU:h">
  <xsl:variable name="id" select="count(ancestor::TU:div)" />
  <xsl:element name="h{$id}" namespace="TUSTEP">
     <xsl:apply-templates select="@* | node()" />
  </xsl:element>
</xsl:template>

试试这样的通用模板:

<xsl:template match="*">
    <xsl:element name="{local-name()}">
        <xsl:apply-templates/>
    </xsl:element>
</xsl:template> 

最新更新