xsl-list
[Top] [All Lists]

RE: removing tab formatting during XSLT?

2002-10-11 02:34:37
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):

Your XSLT should work. In fact, the following much simpler code should
work:

<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
  <xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>

But I see that in a later post, you changed your example, so that A had
mixed content. If you want to remove whitespace from text nodes that
also include non-whitespace characters, you need to use
normalize-space().

Michael Kay
Software AG
home: Michael(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com 


<?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