如何将disable-output-escaping='yes'应用于某些实体引用(>和<) and exclude for &

问题描述 投票:0回答:1

我在跨度内有引文文本。标记字符串有 > 和 < 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="'&lt;span&gt;some text &amp; &lt;span&gt;'"/>

我尝试使用此代码:

<xsl:value-of select="$text" disable-output-escaping="yes"/>

我现在得到的:

<span>some text & <span>

我的期待:

<span>some text &amp; <span>
xslt xslt-3.0
1个回答
0
投票

尝试戒掉禁用输出转义,这是一个可怕的黑客,有很多限制,而你已经发现了其中一个。

这里正确的答案是使用 XML 解析器解析嵌入的 XML(使用 XSLT 3.0 中的 parse-xml() 函数,或早期版本中特定于供应商的扩展函数),然后将解析后的 XML 作为节点进行处理树。

但是,正如 Martin 在评论中指出的那样,问题在于嵌入的 XML 格式不正确。您的属性包含的是格式错误的 XML

<span>some text & <span>
的转义形式。将格式错误的 XML 转换为格式正确的 XML 是一门魔法,最好避免。您应该设计流程,以便格式不正确的 XML 永远不会进入系统,而不是在事件发生后尝试修复它。

© www.soinside.com 2019 - 2024. All rights reserved.