Subject: RE: [xsl] regarding strip-space From: "Andrew Welch" <awelch@xxxxxxxxxxxxxxx> Date: Tue, 16 Jul 2002 15:07:09 +0100 |
Here is a good example that may help you understand whitespace and the way it is handled by some processors: Take this xml: <?xml version="1.0"?> <root> <node>Hello</node> <node>World</node> </root> Here you have the root element, with two <node> elements and some whitespace (carriage returns, non-breaking-spaces etc) as its children. Without the whitespace as children, it would look like this: <?xml version="1.0"?> <root><node>Hello</node><node>World</node></root> This whitespace is pretty insignificant here - its only to make the xml more readable. However, in certain cases you will want to handle this whitespace, which is where <xsl:strip-space> and <xsl:preserve-space> come in. To highlight how these work, try applying this stylesheet to the above xml: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" > <xsl:template match="root"> <xsl:value-of select="."/> </xsl:template> </xsl:stylesheet> Using <xsl:value-of select="."/> on the <root> element will give you the string value of all of its children, including the whitespace: <?xml version="1.0" encoding="utf-8"?> Hello World This whitespace was only to make the xml more readable, and not wanted in the output. To get rid of this, you can use <xsl:strip-space elements="*"/> : <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" > <xsl:strip-space elements="*"/> <xsl:template match="root"> <xsl:value-of select="."/> </xsl:template> </xsl:stylesheet> (You can be more specific than '*' but for now this will do) So you output will now look like this: <?xml version="1.0" encoding="utf-8"?>HelloWorld Note all on one line - no whitespace (carriage returns, nbsp's) You can use this in combination with <xsl:preserve-space> to control the whitespace that gets copied to your output tree. <xsl:preserve-space> has a higher priority than <xsl:strip-space>, so you can strip-space on * and then list the elements you want to keep the whitespace for: <xsl:strip-space elements="*"> <xsl:preserve-space elements="keepme"/> on this data: <remove> <node>Hello</node> <node>World</node> </remove> <keepme> <node>foo</node> <node>bar</node> </keepme> would give you: <?xml version="1.0" encoding="utf-8"?>HelloWorld foo bar The carriage returns within <keepme> have been copied to the output tree, whereas those within <remove> have been stripped. <note> MSXML effectively does a 'strip-space' during parse time, so the xslt processor side of it doesn't ever get to see this kind of whitespace, rendering these two commands useless. </note> The joys of whitespace... cheers andrew -----Original Message----- From: subbu@xxxxxxxxxxxx [mailto:subbu@xxxxxxxxxxxx] Sent: 16 July 2002 13:34 To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: [xsl] regarding strip-space hi I read in the XSLT Reference that xsl:strip-space would actually remove the whitespace-only text nodes from the source. My question is ..( sorry its a bit weird) 1.what is a whitespace-only node?? ( is it an empty element of kind <myel></myel>)?? 2.If i have empty elements like what i have shown above(<myel></myel>) and if i have to pick all the myel elements which have some text in it ( non empty ) then , i beleive the only way to do it is through a condition <xsl:for-each select = //myel[not(string-length(.) = 0)]"> is it true?? or are there any better ways to do it? Subbu -------------------------------------------------------------- Sent with "Me-Mail", Boltblue's FREE mobile messaging service. http://www.boltblue.com XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list --- Incoming mail is certified Virus Free. Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.373 / Virus Database: 208 - Release Date: 01/07/2002 --- Outgoing mail is certified Virus Free. Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.373 / Virus Database: 208 - Release Date: 01/07/2002 XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] regarding strip-space, Jarno . Elovirta | Thread | RE: [xsl] regarding strip-space, subbu |
[xsl] Re: regarding strip-space, Dimitre Novatchev | Date | RE: [xsl] regarding strip-space, subbu |
Month |