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

Kob*_*obi 10 xml xslt sharepoint sharepoint-designer

我有以下<a>标签:

<a href="http://myserver/_forms?url={@FileRef}&amp;id=5">...</a>
Run Code Online (Sandbox Code Playgroud)

其中一个文件被调用"File's got apostrophe.xml".XSL的输出是:

<a href="http://myserver/_forms?url=/blah/File&amp;#39;s got apostrophe.xml&id=5">...</a>
Run Code Online (Sandbox Code Playgroud)

问题是撇号是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>
Run Code Online (Sandbox Code Playgroud)

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

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

tpe*_*zek 17

您可以将<a>生成为文本:

<xsl:text disable-output-escaping="yes">&lt;a href="</xsl:text>
<xsl:value-of select="concat('http://myserver/_forms?url=', @FileRef, '&amp;id=5')" disable-output-escaping="yes" />
<xsl:text disable-output-escaping="yes">" &gt;/a&lt;</xsl:text>
Run Code Online (Sandbox Code Playgroud)

  • 这很有效,虽然结果非常难看.对于下一位开发人员来说真是太遗憾了.谢谢! (4认同)

小智 5

我知道我有点迟到了,但我认为属性标签就是这样,你只是不想连接......

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

  • (source xslt specs :)对于用于结果树中除文本节点之外的其他内容的文本节点,禁用输出转义是一个错误.因此,禁用xsl:value-of或xsl:text元素的输出转义是错误的,该元素用于生成注释,处理指令或属性节点的字符串值; (5认同)