Subject: RE: [xsl] Converting CSV to XML without hardcoding schema details in xsl From: "Pantvaidya, Vishwajit" <vpantvai@xxxxxxxxxxxxx> Date: Wed, 21 Jun 2006 12:17:05 -0700 |
Can anybody suggest how to convert CSV data in the format Field1,Field2 Value11,Value12 to xml like <Field1>Value11</Field1> <Field2>Value12</Field2> without hardcoding the fieldnames in the xsl? I was thinking of something like <xsl:for-each select="tokenize(., ',')"> <<xsl:value-of select="item-at($elementNames,index-of(?parent of current node?,.))"/>> <xsl:value-of select="."/> </<xsl:value-of select="item-at($elementNames,index-of(?parent of current node?,.))"/>> </xsl:for-each> where elementNames is a tokenized list of the fieldnames - but I am unable to get it to work. >-----Original Message----- >From: Pantvaidya, Vishwajit >Sent: Wednesday, June 21, 2006 12:17 AM >To: 'xsl-list@xxxxxxxxxxxxxxxxxxxxxx' >Subject: [xsl] Converting CSV to XML without hardcoding schema details in >xsl > >Hello, > >I am trying to convert a CSV datafile into XMl format. >The headers for the CSV data are in a file header.csv e.g. Field1,Field2 >The data is in a file Data.csv e.g. >Value11,Value12 >Value21,Value22 > >I need to convert the CSV data into xml output by creating xml elements >using the names in the csv header and taking the corresponding values from >the data file, so that I get an xml as follows: > ><doc> ><line> ><Field1>Value11</Field1> ><Field2>Value12</Field2> ></line> ><line> ><Field1>Value21</Field1> ><Field2>Value22</Field2> ></line> ></doc> > >I was trying to see if I can do this without hardcoding the header names in >the xsl. I reached upto the point where my xsl looks as below: > ><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >xmlns:op="http://www.w3.org/2001/12/xquery-operators" > xmlns:xf="http://www.w3.org/2001/12/xquery-functions" version="2.0"> > > <xsl:output name="xmlFormat" method="xml" indent="yes" >omit-xml-declaration="yes"/> > > <xsl:variable name="source1" select="'data.csv'"/> > <xsl:variable name="elementNamesList" select="'Header.csv'"/> > <xsl:variable name="encoding" select="'iso-8859-1'"/> > > <xsl:variable name="elementNames" >select="tokenize(unparsed-text($elementNamesList,$encoding),',')"/> > <xsl:variable name="src"> > <doc> > <xsl:for-each >select="tokenize(unparsed-text($source1,$encoding), '\r?\n')"> > <line> > <xsl:for-each select="tokenize(., ',')"> > <<xsl:value-of >select="op:item-at($elementNames,index-of(?parent of current >node?,.))"/>> > <xsl:value-of select="."/> > </<xsl:value-of >select="item-at($elementNames,3)"/>> > </xsl:for-each> > </line> > </xsl:for-each> > </doc> > </xsl:variable> > > <xsl:template match="/"> > <xsl:result-document format = "xmlFormat" href = "src1.xml"> > <xsl:copy-of select="$src"/> > </xsl:result-document> > </xsl:template> > ></xsl:stylesheet> > >In the yet-incomplete statement <xsl:value-of >select="op:item-at($elementNames,index-of(?parent of current node?,.))"/>, >I >am trying to generate an xml element with the Nth field name from the >headers name list for the Nth field value. Couple of issues/questions here: > >- I am getting the error "Cannot find a matching 2-argument >function named {http://www.w3.org/2001/12/xquery-operators}item-at()" when >I >try to validate the xsl. What could be the reason? > >- How can I get the ?parent of current node? Needed to compute the >index of the current data in the data record? > >- Is there any other better way to do it? Any way that I can do the >same using xsl:element? > >In general, is this the only/best way or is there any other better way to >achieve the same goal? > > >Thanks and Regards, > >Vish.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] XML data appearing in XSL, Wendy Bossons | Thread | RE: [xsl] Converting CSV to XML wit, Wendell Piez |
Re: [xsl] XSLT convert xml file to , Wendell Piez | Date | RE: [xsl] Converting CSV to XML wit, Wendell Piez |
Month |