我在跨度内有引文文本。标记字符串有 > 和 < and &. When I transform that citation text I am using disable-output-escaping='yes'. It is working good for < and >。但我需要将 & 排除在外。因为我将使用输出作为另一个 xslt 转换的输入。
这是给出的文字:
<xsl:variable name="text" select="'<span>some text & <span>'"/>
我尝试使用此代码:
<xsl:value-of select="$text" disable-output-escaping="yes"/>
我现在得到的:
<span>some text & <span>
我的期待:
<span>some text & <span>
尝试戒掉禁用输出转义,这是一个可怕的黑客,有很多限制,而你已经发现了其中一个。
这里正确的答案是使用 XML 解析器解析嵌入的 XML(使用 XSLT 3.0 中的 parse-xml() 函数,或早期版本中特定于供应商的扩展函数),然后将解析后的 XML 作为节点进行处理树。
但是,正如 Martin 在评论中指出的那样,问题在于嵌入的 XML 格式不正确。您的属性包含的是格式错误的 XML
<span>some text & <span>
的转义形式。将格式错误的 XML 转换为格式正确的 XML 是一门魔法,最好避免。您应该设计流程,以便格式不正确的 XML 永远不会进入系统,而不是在事件发生后尝试修复它。