Re: [xsl] How to get comments to indent on their own line in XML output?

Subject: Re: [xsl] How to get comments to indent on their own line in XML output?
From: David Carlisle <davidc@xxxxxxxxx>
Date: Sun, 6 Jul 2008 22:06:37 +0100
>  <xsl:text>&#10;&#xA0;&#09;</xsl:text>

That's a very unsafe way of indenting it will almost always make the
resulting document invalid.

A0 is no breaking space which may look white but is not "whitespace" as
defined by XML so if you indent element content using that the resuklt
will have PCDATA where none is allowed. Just use
<xsl:text>&#10;  </xsl:text>
to indent by a newline and two spaces (or however many spaces you need)

> I guess that I'm really expecting the simple case to work, where
> indentation comes out as a function of nested children without having 
> to add extraneous text nodes.

Your intutition is leading you to exect comments to act as elements
during indentation but as Michael explained that isn't really a safe
assumption, comments can appear in text only element content, and so
the system is treating them (more or less) like text nodes as far as
indentation is concerned. If you don't like that, possibly the simplest
thing to do is instead of using xsl:comment use 
<myCommentElement>this is a comment<myCommentElement>
then it will indent as you wish. then to get it back to being a comment
either do a second transform with an identity transform plust one
template to switch this back or just use
sed -i -e "s/<myCommentElement>/<!--" -e "s/</myCommentElement>/-->" file.xml
(or perl or any other language of choice).


PS sorry, in my reply to MDP I accused you of having been the source of 
a surious <xs:text in an attribute value, it appears it was me, must have
accidentally yanked it one line two early:-)

The Numerical Algorithms Group Ltd is a company registered in England
and Wales with company number 1249803. The registered office is:
Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom.

This e-mail has been scanned for all viruses by Star. The service is
powered by MessageLabs. 

Current Thread