Hi list,
I've written a summary what problems may arise when using
client side XSLT with IE. Tested with IE6 and MSXML3 on
Win2000, it has the form of a stylesheet, to make it ease to
test on different platforms, browser levels and versions of
MSXMLx. Any comments or additions are most welcome!
Regards, Manfred
XML:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="Test_IE_view.xsl" type="text/xsl"?>
<doc xmlns="http://www.w3.org/1999/xhtml">
<p><span>**no*</span><span>*blank**</span></p>
<p>text1<br/>text2</p>
<div style="display: none"/>
</doc>
XSLT:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
exclude-result-prefixes="xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
encoding="UTF-8" omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="xhtml:doc">
<html>
<xsl:comment>in IE-6 below is the same for xsl:output method="xml" or
"html"</xsl:comment>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Testing XSLT in IE (MSXML3)</title>
<style type="text/css">
#div11, #div12 {background: red; width: 200px; height: 6px; border:
4px solid black; overflow:hidden;}
#div11 {border-width: 6px 40px;}
#div12 {border-width: 6px 0px;}
</style>
</head>
<body>
<h2>Testing XSLT in IE (MSXML3)</h2>
<p>As IE strips whitespace before the XSLT processing starts, it may be
worth
to consider <xsl:strip-space elements="*"/> for a
cross-browser
stylesheet.</p>
<p>IE seems to ignore xsl:output encoding="UTF-8" and produces
<?xml version="1.0" encoding="UTF-16"?> for the xml header
(maybe
without negative consequences).</p>
<div id="div11"></div>
<p>same length for quirks-mode (for xsl:output method="xml" and
omit-xml-declaration
ommited or ="no")</p>
<div id="div12"></div>
<p>Using xsl:output method="html" or "xml" seems to make no difference
for the
following tests. First, the elements come from the <b>input
document</b>:
<ul>
<li>with xsl:output indent="yes" CRLF (hex 0D0A) may
be inserted
between elements, even in places where
no whitespace was in the
source. Strongly recommended:
xsl:output indent="no"</li>
<li>the <br/> element becomes <br>CRLF</br>,
giving you an extra
newline. To eliminate the extra newline you might
use <xsl:template
match="xhtml:br"> <br/>
</xsl:template></li>
<li>the <div style="display: none"/> becomes <div
style="display:
none">CRLF</div></li>
</ul>
</p>
<xsl:apply-templates/>
<p>Second, the elements come from the <b>stylesheet</b>:
<ul>
<li>no CRLF (hex 0D0A) will be inserted</li>
<li><br/> correctly becomes <br /></li>
<li><div style="display: none"/> becomes <div
style="display: none" />,
causing IE to skip all content which comes
after it (here
<p>text6</p>). To avoid this,
simply code <div style="display:
none"></div>.</li>
</ul>
</p>
<p><span>**no*</span><span>*blank**</span></p>
<p>text1<br/>text2</p>
<div style="display: none"></div>
<p>text5</p>
<div style="display: none"/>
<p>text6</p>
</body>
</html>
</xsl:template>
<xsl:template match="/">
<xsl:apply-templates select="xhtml:doc"/>
</xsl:template>
</xsl:stylesheet>
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--