我正在學習 XSL,如果可能的話,我希望一個元素進行 2 次轉換。
這是元素:
<xsl:template match="//ns:text[@type='TEXT']">
<xsl:call-template name="break"/>
</xsl:template>
這是第一個轉換和一段代碼:
<xsl:template name="break">
<xsl:param name="text" select="string(.)"/>
<xsl:choose>
<xsl:when test="contains($text, '
')">
<xsl:if test="substring-before($text, '
') != ''">
<p>
<xsl:value-of select="substring-before($text, '
')"/>
</p>
</xsl:if>
<xsl:call-template name="break">
<xsl:with-param name="text" select="substring-after($text, '
')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<p>
<xsl:value-of select="$text"/>
</p>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
對于第二次轉換,我想用translate()方法替換一些字符。
但是,拜托,我該怎么做才能用break 呼叫模板留下第一個轉換并同時放置translate?
在此先感謝您的幫助,
最好的祝福。
uj5u.com熱心網友回復:
我相信執行翻譯的最有效點是在呼叫標記化模板時 - 這樣呼叫看起來像:
<xsl:template match="ns:text[@type='TEXT']">
<xsl:call-template name="break">
<xsl:with-param name="text" select="translate(., 'abc', 'xyz')"/>
</xsl:call-template>
</xsl:template>
然后,在被呼叫的模板中,您需要更改:
<xsl:param name="text" select="string(.)"/>
到:
<xsl:param name="text"/>
盡管如果您不這樣做,它應該也能正常作業。
或者,您可以修改標記化模板,使其僅在一個位置寫入輸出(請參閱此處的示例)。然后在此時執行翻譯。
未經測驗,因為沒有提供測驗示例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/388423.html
上一篇:一個承諾可以解決兩次嗎?
下一篇:匯出需要標準概念的模板函式
