XSL - 如何禁用属性的输出转义?

11

我有以下的<a>标签:

<a href="http://myserver/_forms?url={@FileRef}&amp;id=5">...</a>

其中一个文件名为"File's got apostrophe.xml"。XSL的输出结果为:

<a href="http://myserver/_forms?url=/blah/File&amp;#39;s got apostrophe.xml&id=5">...</a>
问题在于撇号被转义成了 HTML 转义符(两次?),变成了 &amp;#39;,这导致链接无法正常工作。

我也尝试使用 <xsl:attribute>,但结果相同:

<a>
  <xsl:attribute name="href">
    <xsl:value-of select="concat('http://myserver/_forms?url=', @FileRef, '&amp;id=5')"
         disable-output-escaping="yes" />
  </xsl:attribute>
</a>

输出 <xsl:value-of select="@FileRef" disable-output-escaping="yes" /> 的效果很好 - 未经转义的值会被打印到页面上。

我如何在不转义字符串的情况下设置属性?


你尝试过将字符串存储到变量中并输出吗? - Gabriele Petrioli
你尝试过不同的XSLT处理器/浏览器吗? - user306708
@Gaby - 我没有尝试过那个,我想到了,但是它没有意义。它似乎不比输出@FileRef字段更好。你是指整个<a>标记,类似于tpeczek的答案吗? - Kobi
@fx42 - 没有。也许在另一种处理器上会有不同的效果,但由于我正在使用SharePoint,我并没有真正的选择权。 - Kobi
2个回答

18

这是一个相当不错的想法,看起来应该会奏效。我会在周日回到工作岗位后再进行检查。谢谢! - Kobi
4
好的,虽然结果非常丑陋,但它有效了。对于下一个开发者来说真是太遗憾了。谢谢! - Kobi

4

我知道我有点晚了,但是我认为属性标签是解决这个问题的方法,你只需要避免拼接...

<a>
  <xsl:attribute name="href">
    http://myserver/_forms?url=<xsl:value-of select="@FileRef" disable-output-escaping="yes" />&amp;id=5
  </xsl:attribute>
</a>

我遇到了这个问题:https://dev59.com/CFzUa4cB1Zd3GeqP4Y8q - Peter
6
如果一个文本节点用于生成结果树中的注释、处理指令或属性节点的字符串值,且禁用了输出转义,则会出错。因此,禁用xsl:value-of或xsl:text元素的输出转义是错误的。请注意,这不会改变原有意思。 - Peter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接