2
我試圖將java函數轉置爲xsl:function spec。 該函數基本上在子字符串周圍放置了html標籤。 我現在碰到困難:使用java內聯代碼,這完美的工作,但我無法弄清楚如何使用xsl:函數時防止輸出轉義。 我如何實現輸出以包含所需的html標籤?xsl:函數如何返回包含html標記的字符串值
的我試圖實現一個簡單的例子如下: 輸入參數值「AB」應導致串A <b>乙</B >,在HTML瀏覽器中顯示作爲的乙課程。
我試過的例子函數是下面的;但後來得到的字符串是A & lt; b & gt; B & lt;/b & gt; (請注意,我必須添加空白以防止實體在此編輯器中被解釋),這當然會在瀏覽器中顯示爲A <b> B </b >。
請注意,xsl:元素不能在xsl:function代碼中使用,因爲它沒有效果;我希望函數調用的字符串結果包含<和>字符,然後將字符串結果添加到輸出結果文件。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:custom="http://localhost:8080/customFunctions">
<xsl:output method="html" version="4.0" encoding="UTF-8" indent="yes"/>
<xsl:function name="custom:test">
<xsl:param name="str"/>
<xsl:value-of select="substring($str,1,1)"/>
<xsl:text disable-output-escaping="yes"><![CDATA[<b>]]></xsl:text>
<xsl:value-of select="substring($str,2)"/>
<xsl:text disable-output-escaping="yes"><![CDATA[</b>]]></xsl:text>
</xsl:function>
<xsl:template match="/">
<xsl:element name="html">
<xsl:element name="body">
<xsl:value-of select="custom:test('AB')"/>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
那麼簡單嗎?應該知道/嘗試過!我自己也注意到了另一個簡單的解決方案:我忘記添加禁用輸出轉義功能: 這解決了這個問題。 –
Maestro13
2012-01-29 12:35:02
考慮爲了避免任何禁用輸出轉義的黑客,您只需要在函數體中創建節點而不是字符串,並且您需要確保輸出返回的函數結果(使用'xsl:sequence'),而不是其字符串值(使用'xsl:value-of'')。 – 2012-01-29 12:42:49
這樣做當然 - 它也更優雅。 – Maestro13 2012-01-29 12:54:58