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