[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

[xsl] Re: csv data to xml


Subject: [xsl] Re: csv data to xml
From: Olivier XILLO <oxillo@xxxxxxxxxxx>
Date: Sat, 29 Jun 2013 14:18:45 +0200

Hello

Try reposting as the snippet was truncated by webmail...

I'm doing some batch processing of text files to xml using ANT.
Instead of having the text file content fed to the XSLT through unparsed-text(), I'm wrapping the text file in a temporay xml file by adding a opening and closing tag and then process the resulting XML file using ANT XSLT task.


Below is an adapted snippet of my ant target :

<target name="csv2xml">

<!-- First, create one text file with opening tag and one text file with closing tag -->
<echo file="headxml" message="&lt;textwrapper>"/>
<echo file="tailxml" message="&lt;/textwrapper>"/>


<!-- Next, copy the CSV file from ${from.dir} to ${to.dir}-->
<copy todir="${to.dir}">
<fileset dir="${from.dir}" includes="**/*.CSV"/>
<!-- mapping the file extension from CSV to XCSV -->
<mapper type="glob" from="*.VMF" to="*.xvmf"/>
<!-- and adding the content of tag files at the beginning and the end of each CSV file -->
<filterchain>
<concatfilter prepend="headxml" append="tailxml"/>
</filterchain>
</copy>


<!-- Tag files are not needed anymore, delete them -->
        <delete file="headxml"/>
        <delete file="tailxml"/>

<!-- Process the XCSV files as standard XML files ... -->
<xslt style="stylesheet.xsl" destdir="${to.dir}" basedir="${to.dir}">
<mapper type="glob" from="*.XCSV" to="*.xml"/>
</xslt>
</target>


In your stylesheet, you just have to process the content of <textwrapper/> as

<xsl:template match="/textwrapper">

   <!-- For example, you can extract each line with -->
   <xsl:variable name="lines" select="tokenize(text(),'&#xa;')">
   ....
</xsl:template>

Some warnings however, depending on the content of your CSV file, you may obtain an invalid XML file (due to special characters, tag opening,...) and then it won't work...

Hope it helps!

Olivier


Current Thread
Keywords