This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: one line of xml to indented xml doc
- From: Mike Brown <mike at skew dot org>
- To: xsl-list at lists dot mulberrytech dot com
- Date: Mon, 25 Mar 2002 20:03:34 -0700 (MST)
- Subject: Re: [xsl] one line of xml to indented xml doc
- Reply-to: xsl-list at lists dot mulberrytech dot com
Joerg Heinicke wrote:
> Another indentation-stylesheet:
Very close, but it emits a linefeed for the root node and before
the first element's start tag. A simple xsl:if takes care of that:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="no" encoding="us-ascii"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="node()">
<xsl:variable name="indent">
<xsl:if test="ancestor::*">
<xsl:for-each select="ancestor::*">
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:if>
</xsl:variable>
<xsl:if test="string($indent)">
<xsl:value-of select="concat(' ',$indent)"/>
</xsl:if>
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates select="*|text()[normalize-space()]|comment()"/>
<xsl:if test="*">
<xsl:value-of select="concat(' ',$indent)"/>
</xsl:if>
</xsl:copy>
</xsl:template>
<xsl:template match="text()[normalize-space() and not(preceding-sibling::* or following-sibling::*)]">
<xsl:value-of select="normalize-space(.)"/>
</xsl:template>
</xsl:stylesheet>
- Mike
____________________________________________________________________________
mike j. brown | xml/xslt: http://skew.org/xml/
denver/boulder, colorado, usa | resume: http://skew.org/~mike/resume/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list