1
我有一個這樣的XML:如何在使用xsl生成的節點上使用xsl:apply-templates?
<span reference="1">Reference Text 1</span>
<term reference="2">Reference Text 2</term>
,我需要它成爲本:
<span class="referenceText">Reference Text 1</span> <a href="1">[1]</a>
<i>Reference Text 2</i> <a href="2">[2]</a>
所以,基本上,如果與reference
屬性的元素是一個跨度,我們只是把它原樣,加入class="referenceText"
。如果它是其他任何元素,那麼我們也應該爲這個元素創建模板。這就是爲什麼<term>
應該成爲<i>
- 我有這方面的模板:
<xsl:template match="term">
<i><xsl:apply-templates select="@* |node()"/></i>
</xsl:template>
所有元素的一個「參考」標籤的轉型我有這樣的模板:
<xsl:template match="*[@reference]">
<xsl:param name="href" select="./@reference"/>
<xsl:choose>
<xsl:when test="name() = 'span'">
<span class="referenceText">
<xsl:value-of select="."/>
</span>
</xsl:when>
<xsl:otherwise>
<xsl:element name="{name()}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
<xsl:text> </xsl:text><a href="#{$href}">[<xsl:value-of select="./@href"/>]</a>
</xsl:template>
不幸的是,這導致在folllowing輸出中:
<span class="referenceText">Reference Text 1</span> <a href="1">[1]</a>
<term>Reference Text 2</term> <a href="2">[2]</a>
所以,<term>
不轉化爲<i>
。看起來我需要某種遞歸來重新將模板應用於已生成的模板,但我無法想出任何東西。
你可能告訴我如何在我的代碼上做到這一點?我剛剛嘗試過,似乎沒有工作。幾乎我所有的結果文件都消失了。 – snitko
您需要將xmlns:exslt =「http://exslt.org/common」添加到您的根元素(或其他地方)以定義exslt命名空間。你在使用哪種XSLT處理器? –
我正在使用'libxslt'。嘗試添加'xmlns:exslt =「exslt.org/common」'到根元素,沒有運氣。 – snitko