views:

656

answers:

3

I have some XSLT that gets rendered in the Sitecore 6 CMS, but I don't think that this issue is specific to the product.

If I have a self-closing img or br tag, like so:

<br />
<img src="your.example.com" />

The resulting output would be:

<br>
<img src="your.example.com">

The output method of the XSLT file is HTML. Is it supposed to be XML? I'm guessing that self-closing tags are not valid HTML, but is setting it to XML going to cause problems in my output?

+7  A: 

That is just fine. You choose HTML, and <br> tags are allowed in HTML. Choose XML and then you will have what you want.

And yes, you should use XML method if you want self-closing tags. I'm guessing you want XHTML output, and XHTML is a XML document.

prostynick
+2  A: 

On the top of your stylesheet you can specify to use XML as the output format and you can also set a specific DOCTYPE, for example:

<xsl:output method="xml" 
    media-type="text/html" 
    doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
    doctype-system="DTD/xhtml1-strict.dtd"
    cdata-section-elements="script style"
    indent="yes"
    encoding="UTF-8"/>
0xA3
+2  A: 

When you do get self closing tags working, you may run accross some odd bugs. Here are some examples:

A couple years ago in IE, I my whole rendered page was blank, but view source showed the full HTML. The problem was a self closing title tag (<title/>).

Also, self closing script tags (<script src="code.js"/>) can cause the JavaScript files not to load, so inside of your XSLT, you may need to have some text inside the script tag to keep it from self closing and get it to work.

<script src="code.js>//</script>
Kevin Hakanson
AFAIR this (without text): `<script src="code.js></script>` will work too, but indeed, this: `<script src="code.js"/>` couses problems in IE.
prostynick
Good point, it was the xslt process that needed the text, not the browser. I updated the answer to reflect this.
Kevin Hakanson
empty <div> tags will also cause problems.
aweber1