we found the following problem (with Saxon 6.5.2 and 7.2) where we need help. It may be a bug in Saxon, since it works in MSXSL 4.
We want to generate PHP calls in attributes (for HTML forms).
The PHP code is encapsualted in <% and %>.
During generation with SAXON the last ">" will be converted to an html entitiy instead of "copied" to the output.
The XSLT 1.0 spec is explicit: Section 16.4 says "it is an error to disable output escaping for an xsl:text element that is used to generate the string-value of an attribute node... the XSLT processor may signal the error or may recover by ignoring the disable-output-escaping attribute."
Saxon has an extension, <xsl:attribute saxon:disable-output-escaping="yes">, that allows you to achieve what you want. In the latest XSLT 2.0 draft (and in Saxon 7.2) this has been incorporated into the standard.
Michael Kay
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
The XSLT 1.0 spec explicitly says that the html output method should not escape "<" characters occurring in attribute values. I've not idea why, I just do what I'm told.
Michael Kay
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I am using saxon engine. Using xquery i need to add dynamically formed xml into cdata section as per provider. I am not using xslt. Please help me in xquery.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi,
we found the following problem (with Saxon 6.5.2 and 7.2) where we need help. It may be a bug in Saxon, since it works in MSXSL 4.
We want to generate PHP calls in attributes (for HTML forms).
The PHP code is encapsualted in <% and %>.
During generation with SAXON the last ">" will be converted to an html entitiy instead of "copied" to the output.
This is a sample XSL:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.1"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:saxon="http://icl.com/saxon"
extension-element-prefixes="saxon">
<xsl:output method="html" version="1.0" encoding="iso-8859-1" indent="yes"/>
<xsl:template match="*|/">
<form>
<xsl:attribute name="action">
<xsl:text disable-output-escaping="yes"><![CDATA[<? echo $TEST; ?>]]></xsl:text>
</xsl:attribute>
</form>
</xsl:template>
</xsl:stylesheet>
This stylesheet produces the following wrong output:
<form action="<? echo $TEST; ?>"></form>
Correct (produced by MSXSL4) would be:
<form action="<? echo $TEST; ?>"></form>
Any ideas?
Many thanks for your help!
Best
Olaf
Saxon is correct and MSXML4 is wrong.
The XSLT 1.0 spec is explicit: Section 16.4 says "it is an error to disable output escaping for an xsl:text element that is used to generate the string-value of an attribute node... the XSLT processor may signal the error or may recover by ignoring the disable-output-escaping attribute."
Saxon has an extension, <xsl:attribute saxon:disable-output-escaping="yes">, that allows you to achieve what you want. In the latest XSLT 2.0 draft (and in Saxon 7.2) this has been incorporated into the standard.
Michael Kay
Hi Michael,
ok I understand. It works now. Many thanks for your help!
btw: why was the first "<" character not converted to an entity?
Best
Olaf
The XSLT 1.0 spec explicitly says that the html output method should not escape "<" characters occurring in attribute values. I've not idea why, I just do what I'm told.
Michael Kay
Long live the spec.... :)
/Olaf
Hi
I am using saxon engine. Using xquery i need to add dynamically formed xml into cdata section as per provider. I am not using xslt. Please help me in xquery.