我对XSLT有以下问题。
在XML文档中,我在<h></h>
个不同级别的标记中嵌入了多个<div></div>
标记。
努力将所有<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>
我是否需要做类似的事情来保存每个元素,还是有更好的方法?
感谢您的帮助。
答案 0 :(得分:9)
添加身份模板以匹配其他所有内容......
<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>
答案 1 :(得分:0)
尝试这样的通用模板:
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>