RE: [xsl] removing tab formatting during XSLT?

Subject: RE: [xsl] removing tab formatting during XSLT?
From: "Michael Kay" <michael.h.kay@xxxxxxxxxxxx>
Date: Fri, 11 Oct 2002 10:46:40 +0100
> I've had the opposite problem with MSXML.  I have had inconsistent 
> experiences as far as white space goes with its processor.

If you control MSXML parsing from script, you can persuade it to retain
whitespace using the preserveWhitespace property on the DOM Document
object. But by default it strips it off - which is certainly bad news
when handling mixed content.

Michael Kay
Software AG
home: Michael.H.Kay@xxxxxxxxxxxx
work: Michael.Kay@xxxxxxxxxxxxxx 

  
> Generally, 
> it removes _all_ white space, which makes debugging difficult 
> -- Try to 
> find the piece of code you are looking for when the entire 
> document has 
> no breaks or tabs.
> 
> I played around with xsl:preserve-space, xsl:strip-space, and 
> xsl:output 
> indent="yes".  output[@indent] helped, but it just broke the 
> lines very 
> frequently -- didn't actually indent.
> 
> My point is that maybe there are options or shortcomings in your xml 
> processor that make it shade into the grey area on things 
> like whitespace.
> 
> Mike
> 
> Macaulay,Malcolm (US) wrote:
> 
> >Thanks Richard,
> >
> >Still no go however. I changed my XLST to:
> >
> ><?xml version="1.0" encoding="UTF-8"?>
> ><xsl:stylesheet version="1.0" 
> >xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> >	
> >	<xsl:output method="xml" version="1.0" encoding="UTF-8" 
> indent="no"/>
> >	
> >	<xsl:strip-space elements="*"/>
> >	
> >	<xsl:template match="/">
> >		<xsl:apply-templates/>
> >	</xsl:template>
> >	
> >	<xsl:template match="*">
> >		<!-- recreate the element -->
> >		<xsl:element name="{name()}">
> >			<xsl:apply-templates/>
> >		</xsl:element>
> >	</xsl:template>
> >	
> >	<xsl:variable name="tab">&#x9;</xsl:variable>
> >	
> >	<xsl:template match="text()">
> >		<xsl:value-of select="translate(. , $tab , '')"/>
> >	</xsl:template>
> >
> ></xsl:stylesheet>
> >
> >However the match="text()" template does not get invoked on the * 
> >element below:
> >
> ><?xml version="1.0"?>
> ><A>
> >	*<B att="att">a</B>
> >	<C>b</C>
> >	<D>c</D>
> ></A>
> >
> >I'm clearly misunderstanding this. Is there a text element in the * 
> >position?
> >
> >Any additional help would be greatly appreciated.
> >
> >cheers
> >
> >Malcolm
> >
> >
> >-----Original Message-----
> >From: Richard Lander [mailto:rlander@xxxxxxxxxxxxx]
> >Sent: Thursday, October 10, 2002 2:18 PM
> >To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> >Subject: RE: [xsl] removing tab formatting during XSLT?
> >
> >
> >I've done this sort of thing before ...
> >
> >You have two problems, as I see it.
> >
> >1- you are referencing a named entity (nbsp;) w/o really 
> doing so. You 
> >would need to use '&nbsp;'. Still, that probably doesn't make any 
> >sense, given that a non-breaking space isn't the same as a tab.
> >
> >2. You should search on '&#x9;' instead. I'm pretty sure 
> that that is 
> >the tab character ...
> >
> >Rich
> > 
> >-----Original Message-----
> >From: Macaulay,Malcolm (US) [mailto:Malcolm.Macaulay2@xxxxxxxxx]
> >Sent: Thursday, October 10, 2002 10:55 AM
> >To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> >
> >Could someone please enlighten me on how I can remove tab formatting 
> >from my resulting XML.
> >
> >Here's an example:
> >
> >Source XML:
> >
> ><?xml version="1.0"?>
> ><A>
> >	<B att="att">a</B>
> >	<C>b</C>
> >	<D>c</D>
> ></A>
> >
> >Desired output XML (i.e. the same as input but with all tabs 
> removed):
> >
> ><?xml version="1.0"?><A><B att="att">a</B><C>b</C><D>c</D></A>
> >
> >XSLT (which doesn't work):
> >
> ><?xml version="1.0" encoding="UTF-8"?>
> ><xsl:stylesheet version="1.0" 
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> >	<xsl:output method="xml" version="1.0" encoding="UTF-8" 
> indent="no"/>
> >	
> >	<xsl:strip-space elements="*"/>
> >	
> >	<xsl:template match="/">
> >		<xsl:apply-templates/>
> >	</xsl:template>
> >	
> >	<xsl:template match="*">
> >		<!-- recreate the element -->
> >		<xsl:element name="{name()}">
> >			<!-- copy existing attributes-->
> >			<xsl:for-each select="@*">
> >				<xsl:copy/>
> >			</xsl:for-each>
> >			<xsl:apply-templates/>
> >		</xsl:element>
> >	</xsl:template>
> >	
> >	<xsl:variable name="tab">nbsp;</xsl:variable>
> >	
> >	<xsl:template match="text()">
> >		<xsl:value-of select="translate(. , $tab , '')"/>
> >	</xsl:template>
> >
> >	<!-- original attempt	
> >	<xsl:template match="text()">
> >		<xsl:value-of select="normalize-space(.)"/>
> >	</xsl:template>
> > 	-->
> > 
> ></xsl:stylesheet>
> >
> >I want to remove the tabs because this significantly reduces 
> the size 
> >of the file.
> >
> >Thanks in advance.
> >
> >cheers
> >
> >Malcolm
> >
> > XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> >
> >
> >
> >
> > XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> >
> >
> > XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> >
> >  
> >
> 
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> 
> 


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread