对于下面的xml,我想从xslt在浏览器上呈现未转换的文本部分,例如:
<one>
<text>
</one>
我希望在浏览器上呈现的标记为:
<text>
但是当我使用下面的应用模板时
<xsl:template match="text()" mode="literalHTML">
<xsl:copy-of select=".">
</xsl:copy-of>
</xsl:template>
上面的XML呈现为:
<text>
如何修改此模板以便在浏览器上打印<;文本>?
谨致问候,
克沙夫
最佳答案
这可以通过使用相当复杂的递归处理在XSLT 1.0中实现。
幸运的是,可以使用FXSL(XSLT模板库)在几分钟内解决相同的任务:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:f="http://fxsl.sf.net/"
xmlns:testmap="testmap"
exclude-result-prefixes="xsl f testmap">
<xsl:import href="str-dvc-map.xsl"/>
<testmap:testmap/>
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:variable name="vTestMap" select="document('')/*/testmap:*[1]"/>
<xsl:call-template name="str-map">
<xsl:with-param name="pFun" select="$vTestMap"/>
<xsl:with-param name="pStr" select="/*/text()"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="escape" mode="f:FXSL"
match="*[namespace-uri() = 'testmap']">
<xsl:param name="arg1"/>
<xsl:choose>
<xsl:when test="$arg1 = '<'">&lt;</xsl:when>
<xsl:when test="$arg1 = '>'">&gt;</xsl:when>
<xsl:otherwise><xsl:value-of select="$arg1"/></xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
当此转换应用于以下XML文档时:
<one>
<text>
</one>
得到想要的结果:
&lt;text&gt;
在浏览器中显示为:
<text>