11

I've had the following <a> tag:

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

One of the files is called "File's got apostrophe.xml". The output of the XSL is:

<a href="http://myserver/_forms?url=/blah/File&amp;#39;s got apostrophe.xml&id=5">...</a>

The problem is that the apostrophe is HTML-escaped (twice?) into &amp;#39;, which breaks the link.

I've also tried using <xsl:attribute>, with same results:

<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>

Outputting <xsl:value-of select="@FileRef" disable-output-escaping="yes" /> works well - the unescaped value is printed on the page.

How can I set the attribute without escaping the string?

Kobi
  • 135,331
  • 41
  • 252
  • 292

2 Answers2

18

You can generate your <a> as text:

<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>
Allan
  • 12,117
  • 3
  • 27
  • 51
tpeczek
  • 23,867
  • 3
  • 74
  • 77
  • That's a pretty good idea, looks like this is going to work. I'll check on Sunday when I'm back to work. Thanks! – Kobi May 27 '10 at 13:46
  • 4
    That worked, though the result is exceptionally ugly. What a shame for that next developer. Thanks! – Kobi May 30 '10 at 12:31
4

I know I'm a bit late on this, but I think the attribute tag is the way to, you just don't want to concat...

<a>
  <xsl:attribute name="href">
    http://myserver/_forms?url=<xsl:value-of select="@FileRef" disable-output-escaping="yes" />&amp;id=5
  </xsl:attribute>
</a>
  • I had this problem : http://stackoverflow.com/questions/7887016/disable-output-escaping-not-working-for-attribute-in-xlst – Peter Oct 25 '11 at 09:18
  • 6
    (source xslt specs:)It is an error for output escaping to be disabled for a text node that is used for something other than a text node in the result tree. Thus, it is an error to disable output escaping for an xsl:value-of or xsl:text element that is used to generate the string-value of a comment, processing instruction or attribute node; – Peter Oct 25 '11 at 09:28