xsl-list
[Top] [All Lists]

RE: removing tab formatting during XSLT?

2002-10-11 02:46:40
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(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com 

  
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[(_at_)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(_at_)microsoft(_dot_)com]
Sent: Thursday, October 10, 2002 2:18 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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(_dot_)Macaulay2(_at_)cnare(_dot_)com]
Sent: Thursday, October 10, 2002 10:55 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com

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