我在 XSLT 文件中使用以下 XSLT 函数来生成 XHTML 输出:
<xsl:function name="local:if-not-empty">
<xsl:param name="prefix"/>
<xsl:param name="str"/>
<xsl:param name="suffix"/>
<xsl:if test="$str != ''"><xsl:value-of select="concat($prefix, $str, $suffix)"/></xsl:if>
</xsl:function>
它只是检查字符串str
是否不为空,如果是,则返回字符串,并与前缀和后缀连接。
只要我只传递简单的字符串,该函数就可以正常工作。但是当我尝试将 HTML 元素作为前缀或后缀传递时,例如:
<xsl:value-of select="local:if-not-empty('', /some/xpath/expression, '<br/>')"/>
我收到以下错误消息:
SXXP0003: Error reported by XML parser: The value of attribute "select"
associated with an element type "null" must not contain the '<' character.
我尝试的下一件事是定义一个变量:
<xsl:variable name="br"><br/></xsl:variable>
并将其传递给函数:
<xsl:value-of select="local:if-not-empty('', /some/xpath/expression, $br)"/>
但是在这里,当然,我得到一个空字符串,因为元素的值被提取,而不是元素本身被复制。
我最后一次绝望的尝试是在变量中定义一个文本元素:
<xsl:variable name="br">
<xsl:text disable-output-escaping="yes"><br/></xsl:text>
</xsl:variable>
并将其传递给函数,但这也是不允许的。
XTSE0010: xsl:text must not contain child elements
我可能不了解 XSLT 复杂的内部工作原理,但在我看来,<br/>
通过通用函数在 XSLT 转换中添加一个元素似乎是合法的......
无论如何...如果有人能给我一个替代解决方案,我将不胜感激。我也想了解为什么这不起作用...
PS:我使用的是 Saxon-HE 9.4.0.1J,Java 版本 1.6.0_24