i have a tiny little problem with xslt, js and html entities, eg. within a template:
<script type="text/javascript">
<xsl:value-of select="/some/node"/>
for (var i = 0; i < 5; i++) {
// ^^^ js error
}
</script>
<script type="text/javascript">
<xsl:value-of select="/some/node"/>
for (var i = 0; i < 5; i++) {
// ^ xslt error
}
</script>
<script type="text/javascript">
<xsl:value-of select="/some/node"/>
// <![CDATA[
for (var i = 0; i < 5; i++) {
// ^ becomes <
}
// ]]>
</script>
<script type="text/javascript">
<xsl:value-of select="/some/node"/>
for (var i = 0; i <xsl:value-of disable-output-escaping="yes" select="string('<')"/> 5; i++) {
// works of course
}
</script>
does anyone have an idea where my problem could come from? i always thought the xslt processor would leave the content of a <script/> element unescaped when using the html output method ...
i run libxslt2 version 1.1.24 on OSX which was installed using macportsports ...
Try removing the double slash before the CDATA of your third solution
If the
xsl:output
method is html, the CDATA section would work. If thexsl:output
method is xml, the < and > signs would still be converted.To get around this problem, you may define the script element to not behave this way using the xsl:output element. you can also force the method of the output using xml or html
ok. long story, short answer:
it seems that with some libxslt versions the xslt processor leaves the content of a <script/> element unescaped when using the html output method, with others not ... therefore the following is recommended:
You are correct: http://www.w3.org/TR/xslt#section-HTML-Output-Method
If your XSLT processor is doing otherwise, it's a bug.
However, in any case it's a good idea to avoid '<' and '&' in embedded scripts, and an even better idea to kick all the code out into a linked .js file.
The
CDATA
blocks should have worked; they always have for me. What's yourdisable-output-escaping
value?UPDATE: Using Xalan, with
disable-output-escaping
on its default, which I'm pretty sure isno
, I have the following in my working XSL files:No
CDATA
block:CDATA
block: