卡斯滕的測試案例作品(含有少量的調整,需要終止xsl:value-of
用/),但始終使用<h2>
作爲標題。如果您想根據標題的嵌套級別使用不同的標題elemenents,那麼你就需要另外的東西吧:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="title">
<xsl:choose>
<xsl:when test="count(ancestor::section) = 1">
<h1><xsl:value-of select="." /></h1>
</xsl:when>
<xsl:when test="count(ancestor::section) = 2">
<h2><xsl:value-of select="." /></h2>
</xsl:when>
<xsl:otherwise>
<h3><xsl:value-of select="." /></h3>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="para">
<p><xsl:value-of select="." /></p>
</xsl:template>
</xsl:stylesheet>
的XPath函數count(ancestor::section)
將返回所有<section>
元素是父母的計數當前元素。在這個例子中,我使用了<h1>
和<h2>
作爲兩個最外層的層次,而<h3>
作了更深層的嵌套,但是當然你可以在你的冒犯中使用其他的區分。
這將甚至有可能產生上飛的標題後的數目,使用此表達式:
<xsl:template match="title">
<xsl:variable name="heading">h<xsl:value-of select="count(ancestor::section)" /></xsl:variable>
<xsl:element name="{$heading}">
<xsl:value-of select="." />
</xsl:element>
</xsl:template>
在那裏xsl:variable
部分創建與h
+嵌套級的值的變量。然後該變量可用作xsl:element
元素的參數,該參數允許您動態定義要創建的元素的名稱。
跟帖:如果你想只使用H1-H6的建議,你可以做這樣的:
<xsl:template match="title">
<xsl:variable name="hierarchy" select="count(ancestor::section)"/>
<xsl:variable name="heading">h<xsl:value-of select="$hierarchy" /></xsl:variable>
<xsl:choose>
<xsl:when test="$hierarchy > 6">
<h6 class="{$heading}"><xsl:value-of select="." /></h6>
</xsl:when>
<xsl:otherwise>
<xsl:element name="{$heading}">
<xsl:value-of select="." />
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
該表達式使用<h6 class="h...">
對於任何有嵌套深度大於6,對於所有其他層級使用<h1>
到<h6>
。
看到[這個問題](http://stackoverflow.com/questions/1900184/how-to-break-the-tree-structure-of-the-xml-document-to-desired-one) –