I am using xslt to transform an xml file to html. The .net xslt engine keeps serving me self-closing tags for empty tags.
Example:
<div class="test"></div>
becomes
<div class="test" />
The former is valid html, while the latter is illegal html and renders badly. My question is : How do I tell the xslt engine (XslCompiledTransform) to not use self-closing tags.
If it's not possible, how can I tell my browser (IE6+ in this case) to interpret self-closing tags correctly.
There are a few things you need to be careful:
This is a piece of working code:
If you are using XmlWriter as your ouput stream, use HTMLTextWriter instead. XMLWriter will reformat your HTML output back to XML.
You can't tell your browser to handle invalid HTML as HTML -- you're lucky it understands malformed HTML at all. :)
Definitely do this in your stylesheet:
But, if your source document has namespaces, this won't do the trick. XSLT processors seem to silently change the output method back to XML if namespace nodes are present in the output.
You need to replace all instances of
<xsl:copy-of>
and<xsl:copy>
with creations of elements with just the local name, e.g.See
etc.
Change your
xsl:output
method to behtml
(instead ofxml
).Or add it if you haven't already got the element
The easy way I found was creating a new XmlTextWriter class to override the method WriteEndElement, forcing the non-closing tag and pass on the serialization process as parameter.