RE: [xsl] transforming a XML to CSV

Subject: RE: [xsl] transforming a XML to CSV
From: "Evan Lenz" <elenz@xxxxxxxxxxx>
Date: Wed, 14 Mar 2001 11:11:30 -0800
Here's one possible solution. It just asumes that you place the REPORT_ITEM
elements inside one root element called REPORT_ITEMS.

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

  <xsl:output method="text"/>

  <xsl:template match="/">
    <xsl:apply-templates select="/REPORT_ITEMS/REPORT_ITEM"/>
  </xsl:template>

  <xsl:template match="REPORT_ITEM">
    <xsl:apply-templates select="DATA">
      <xsl:with-param name="itemNo" select="position()"/>
    </xsl:apply-templates>
  </xsl:template>

  <xsl:template match="DATA">
    <xsl:param name="itemNo"/>
    <xsl:apply-templates select="../HEADER/REPORT"/>
    <xsl:text>,</xsl:text>
    <xsl:value-of select="$itemNo"/>
    <xsl:text>,</xsl:text>
    <xsl:apply-templates select="../HEADER/UOM"/>
    <xsl:text>,</xsl:text>
    <xsl:apply-templates select="*"/>
    <xsl:text>
</xsl:text>
  </xsl:template>

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

</xsl:stylesheet>

Enjoy,

Evan Lenz
XYZFind Corp.

> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of Awasthi,
> Anand
> Sent: Wednesday, March 14, 2001 9:47 AM
> To: 'xsl-list@xxxxxxxxxxxxxxxxxxxxxx'
> Subject: [xsl] transforming a XML to CSV
>
>
>
> Hi,
>
> I am trying to transform  the following XML file in to a comma separated
> file (.csv).
>
>
> <REPORT_ITEM>
> 		<HEADER>
> 			<REPORT>Venkatesh</REPORT>
> 			<SYSTEM>OASIS</SYSTEM>
> 			<TZ>PPT</TZ>
> 			<MKT_TYPE>R</MKT_TYPE>
> 			<SCHED_CLASS/>
> 			<UOM>US$</UOM>
> 			<INTERVAL>ENDING</INTERVAL>
> 			<SEC_PER_INTERVAL>3600</SEC_PER_INTERVAL>
> 		</HEADER>
> 		<DATA>
> 			<DATA_ITEM>SPIN_PRICE</DATA_ITEM>
> 			<SOURCE/>
> 			<SINK/>
> 			<RESOURCE>ZP26</RESOURCE>
> 			<OPR_DATE>20000512</OPR_DATE>
> 			<INTERVAL_NUM>24</INTERVAL_NUM>
> 			<NULL_FLAG>F</NULL_FLAG>
> 			<VALUE>0.25</VALUE>
> 		</DATA>
> 		<DATA>
> 			<DATA_ITEM>SPIN_PRICE</DATA_ITEM>
> 			<SOURCE/>
> 			<SINK/>
> 			<RESOURCE>ZP26</RESOURCE>
> 			<OPR_DATE>20000512</OPR_DATE>
> 			<INTERVAL_NUM>25</INTERVAL_NUM>
> 			<NULL_FLAG>T</NULL_FLAG>
> 			<VALUE/>
> 		</DATA>
> 	</REPORT_ITEM>
> 	<REPORT_ITEM>
> 		<HEADER>
> 			<REPORT>Parigi</REPORT>
> 			<SYSTEM>OASIS</SYSTEM>
> 			<TZ>PPT</TZ>
> 			<MKT_TYPE>D</MKT_TYPE>
> 			<SCHED_CLASS/>
> 			<UOM>MW</UOM>
> 			<INTERVAL>ENDING</INTERVAL>
> 			<SEC_PER_INTERVAL>3600</SEC_PER_INTERVAL>
> 		</HEADER>
> 		<DATA>
> 			<DATA_ITEM>SPIN_PRICE</DATA_ITEM>
> 			<SOURCE/>
> 			<SINK/>
> 			<RESOURCE>ZP26</RESOURCE>
> 			<OPR_DATE>20000512</OPR_DATE>
> 			<INTERVAL_NUM>24</INTERVAL_NUM>
> 			<NULL_FLAG>F</NULL_FLAG>
> 			<VALUE>0.25</VALUE>
> 		</DATA>
> 		<DATA>
> 			<DATA_ITEM>SPIN_PRICE</DATA_ITEM>
> 			<SOURCE/>
> 			<SINK/>
> 			<RESOURCE>ZP26</RESOURCE>
> 			<OPR_DATE>20000512</OPR_DATE>
> 			<INTERVAL_NUM>25</INTERVAL_NUM>
> 			<NULL_FLAG>T</NULL_FLAG>
> 			<VALUE/>
> 		</DATA>
> 	</REPORT_ITEM>
>
>
> the kind of output which i am trying to achieve is something like :
> ( i want HEADER ELEMENT to repeat  with all DATA_ITEM ELELMENTS )
>
> Venkatesh,1,US$,SPIN_PRICE,,,ZP26,20000512,24,F,0.25
> Venkatesh,1,US$,SPIN_PRICE,,,ZP26,20000512,25,T
> Parigi,2,MW,SPIN_PRICE,,,ZP26,20000512,24,0.25
> Parigi,2,MW,SPIN_PRICE,,,ZP26,20000512,25,T
>
>
>
>
>
> could someone please help me ??
>
>
> thanks
> Anand
>
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
>


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread