Re: [xsl] XML To CSV

Subject: Re: [xsl] XML To CSV
From: "J.Pietschmann" <j3322ptm@xxxxxxxx>
Date: Wed, 04 Aug 2004 21:54:50 +0200
ashushujev@xxxxxxxxxxxx wrote:
<xsl:template match="/"> <xsl:apply-templates select="//Account[1]/descendant::*" />

You should process each Account separately, in order to get each on a separate line. Note that the "//" starting the XPath expression unnecessarily walks the whole tree, slowing down processing.

<xsl:template match="*"> <xsl:if test = "normalize-space(text())!=''" > <xsl:value-of select = "." /> <xsl:if test = "not(position()=last())" > <xsl:text > ,</xsl:text>
</xsl:if> </xsl:if> </xsl:template>

I suspect this template works by accident only...


Try something like
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
  version="1.0">
    <xsl:output method="text"/>

    <xsl:template match="Account">
       <!-- select leaf nodes -->
       <xsl:apply-templates select="descendant::*[not(*)]"/>
       <!-- one way to produce a line feed -->
       <xsl:text>&#x0A</text>
    </xsl:template>

    <xsl:template match="*">
       <xsl:value-of select = "." />
       <xsl:if test = "not(position()=last())" >
          <xsl:text > ,</xsl:text>
       </xsl:if>
    </xsl:template>
</xsl:stylesheet>

Beware, untested.

J.Pietschmann

Current Thread