This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: transforming a XML to CSV
- To: <xsl-list at lists dot mulberrytech dot com>
- Subject: RE: [xsl] transforming a XML to CSV
- From: "Evan Lenz" <elenz at xyzfind dot com>
- Date: Wed, 14 Mar 2001 11:11:30 -0800
- Reply-To: xsl-list at lists dot mulberrytech dot com
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@lists.mulberrytech.com
> [mailto:owner-xsl-list@lists.mulberrytech.com]On Behalf Of Awasthi,
> Anand
> Sent: Wednesday, March 14, 2001 9:47 AM
> To: 'xsl-list@lists.mulberrytech.com'
> 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