我有一个带有一些HTML标记的字符串,如下所示
<strong>foo</strong>
我希望解析器将其输出为 HTML,但xsl:value-of
字面上写出来。我已经像这样设置了样式表的输出属性
<xsl:output method="html" encoding="UTF-8"/>
但它没有按照我想要的方式工作。建议不胜感激。
编辑:添加了上下文。它是一个简单的解析器,它接受一个输入字符串并将其分成特殊代码(括在方括号内)和 HTML 内容。HTML 输出与<xsl:value-of select="$c" disable-output-escaping="yes" />
一致
测试字符串为 [ title: "Rady Expertů" ] <strong>Foo</strong>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8"/>
<!-- parser -->
<xsl:template name="box-parser">
<xsl:param name="content" />
<xsl:param name="property" />
<!-- extract code wrapped up in brackets -->
<xsl:variable name="a" select="substring-before($content, ']')" />
<xsl:variable name="b" select="substring-after($a, '[')" />
<!-- HTML content -->
<xsl:variable name="c" select="substring-after($content, ']')" />
<xsl:variable name="output">
<xsl:choose>
<!-- if we want to output HTML content only -->
<xsl:when test="$property = 'content-only'">
<xsl:value-of select="$c" disable-output-escaping="yes" />
</xsl:when>
<!-- if we want to output the value of a property -->
<xsl:when test="contains($b, $property)">
<xsl:value-of select="substring-before(substring-after(substring-after($b, $property), '"'), '"')" />
</xsl:when>
<!-- error -->
<xsl:otherwise>promenna '<xsl:value-of select="$property" />' nenalezena</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="$output" />
</xsl:template>
禁用$output
上的输出转义
<xsl:value-of select="$output" disable-output-escaping="yes" />