[xsl] Attribute value quoting with Saxon8

Subject: [xsl] Attribute value quoting with Saxon8
From: Victor Toni <xsl-list@xxxxxxxxx>
Date: Fri, 19 Aug 2005 22:51:32 +0200
I am trying to change some web pages for an embbeded device from ancient
HTML to XML which should ease changes of the resulting pages.
The resulting pages will be _not_ valid  HTML because they are parsed by
the HTTP server of the device and then the hopefully valid result will
be returned to the browser.

However I have some trouble to create attributes which values are in
double qoutes if the value itself contains double qoutes.

My environment:
     JDK 1.5.0_04 (on WinXP)
     Saxon-B 8.5

Any help is greatly appreciated.

Kindest regards,
Victor

test.xml
------------------

<?xml version="1.0" encoding="UTF-8"?>

<test>
	<a>
		<attribute name="href"><![CDATA[<% get_href(); %>]]></attribute>
		<text>Works</text>
	</a>

	<a>
		<attribute name="href"><![CDATA[<% get_value("href"); %>]]></attribute>
		<text>Doesn't work as expected</text>
	</a>
</test>


test.xsl ------------------

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
	version="2.0"
>

<xsl:param name="file"/>

<xsl:output
	encoding="UTF-8"
	method="xhtml"
	indent="yes"
	use-character-maps="cm1"
/>

<xsl:character-map name="cm1">
	<xsl:output-character character="&#160;" string="&amp;nbsp;"/>
	<xsl:output-character character="&#xE001;" string="&lt;"/>
	<xsl:output-character character="&#xE002;" string="&gt;"/>
	<xsl:output-character character="&#xE003;" string="&amp;"/>
	<xsl:output-character character="&#xE004;" string="&quot;"/>
</xsl:character-map>

<xsl:template match="attribute"><!--
--><xsl:attribute name="{@name}"><xsl:value-of select="translate(.,'&lt;&gt;&amp;&quot;','&#xE001;&#xE002;&#xE003;&#xE004;')"/></xsl:attribute><!--


--></xsl:template>

<!--
just copy all nodes without a specialized template
-->
<xsl:template match="*|@*"><xsl:copy><xsl:apply-templates select="@*"/><xsl:apply-templates/></xsl:copy></xsl:template>


<!--
normalize excessive use of whitespaces
-->
<xsl:template match="text()">
<xsl:if test="string-length(normalize-space(.)) != 0">
<xsl:if test="starts-with(.,' ')"><xsl:text> </xsl:text></xsl:if><xsl:value-of select="normalize-space(.)"/><xsl:if test="ends-with(.,' ')"><xsl:text> </xsl:text></xsl:if>
</xsl:if>
</xsl:template>


</xsl:stylesheet>


test-result.html ------------------

<?xml version="1.0" encoding="UTF-8"?><test>
   <a href="<% get_href(); %>">
      <text>Works</text>
   </a>
   <a href='<% get_value("href"); %>'>
      <text>Doesn't work as expected</text>
   </a>
</test>

test-expected.html
------------------

<?xml version="1.0" encoding="UTF-8"?><test>
   <a href="<% get_href(); %>">
      <text>Works</text>
   </a>
   <a href="<% get_value("href"); %>">
      <text>Doesn't work as expected</text>
   </a>
</test>

Current Thread