xsl-list
[Top] [All Lists]

Re: [xsl] XSL for CSV to XML

2019-02-14 02:29:49
Perhaps this existing XSLT would be of use -
https://github.com/digital-preservation/csv-tools

On Thu, 14 Feb 2019 at 06:53, Rahul Singh rahulsinghindia15(_at_)gmail(_dot_)com
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:

Hi,

I wrote XSL for CSV to XML conversion but i am not getting proper output for 
#Id 3. and Also I need output as per given expected output. Need yours help 
please for given Input CSV, XSL Code, Current Output, Expected Output:

Input CSV:

<root>ID|Value|Number|descr1|descr2|descr3|descr4
1|AAAAA|1|aaaaaaaaaaa|aaaaaaaaaaa|aaaaaaaaaaa|aaaaaaaaaaa
2|AAAAA|2|aaaaaaaaaaa|aaaaaaaaaa|aaaaaaaa|aaaaaaaaaaaa
3|AAAAA|3|aaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|aaaaaaaaaaa|aaaaaaaaaaa|aaaaaaaaaaa</root>

XSL Code:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
xmlns:xs="http://www.w3.org/2001/XMLSchema"; exclude-result-prefixes="xs">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="/">
<root>
<xsl:call-template name="texttorows">
<xsl:with-param name="StringToTransform" select="root"/>
</xsl:call-template>
</root>
</xsl:template>
<xsl:template name="texttorows">
<xsl:param name="StringToTransform" select="''"/>
<xsl:choose>
<xsl:when test="contains($StringToTransform,'&#xA;')">
<row>
<xsl:call-template name="csvtoxml">
<xsl:with-param name="StringToTransform" 
select="substring-before($StringToTransform,'&#xA;')"/>
</xsl:call-template>
</row>
<xsl:call-template name="texttorows">
<xsl:with-param name="StringToTransform">
<xsl:value-of select="substring-after($StringToTransform,'&#xA;')"/>
</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<row>
<xsl:call-template name="csvtoxml">
<xsl:with-param name="StringToTransform" select="$StringToTransform"/>
</xsl:call-template>
</row>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="csvtoxml">
<xsl:param name="StringToTransform" select="''"/>
<xsl:choose>
<xsl:when test="contains($StringToTransform,'|')">
<elem>
<xsl:value-of select="substring-before($StringToTransform,'|')"/>
</descr1>
<xsl:call-template name="csvtoxml">
<xsl:with-param name="StringToTransform">
<xsl:value-of select="substring-after($StringToTransform,'|')"/>
</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<elem>
<xsl:value-of select="$StringToTransform"/>
</descr1>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

Current Output:

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <row>
      <elem>ID</descr1>
      <elem>Value</descr1>
      <elem>Number</descr1>
      <elem>descr1</descr1>
      <elem>descr2</descr1>
      <elem>descr3</descr1>
      <elem>descr4</descr1>
   </row>
   <row>
      <elem>1</descr1>
      <elem>AAAAA</descr1>
      <elem>1</descr1>
      <elem>aaaaaaaaaaa</descr1>
      <elem>aaaaaaaaaaa</descr1>
      <elem>aaaaaaaaaaa</descr1>
      <elem>aaaaaaaaaaa</descr1>
   </row>
   <row>
      <elem>2</descr1>
      <elem>AAAAA</descr1>
      <elem>2</descr1>
      <elem>aaaaaaaaaaa</descr1>
      <elem>aaaaaaaaaa</descr1>
      <elem>aaaaaaaa</descr1>
      <elem>aaaaaaaaaaaa</descr1>
   </row>
   <row>
      <elem>3</descr1>
      <elem>AAAAA</descr1>
      <elem>3</descr1>
      <elem>aaaaaaaaaaa</descr1>
   </row>
   <row>
      
<elem>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</descr1>
      <elem>aaaaaaaaaaa</descr1>
      <elem>aaaaaaaaaaa</descr1>
      <elem>aaaaaaaaaaa</descr1>
   </row>
</root>

Expected Output:

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <row>
      <ID>1</ID>
      <Value>AAAAA</Value>
      <Number>1</Number>
      <descr1>aaaaaaaaaaa</descr1>
      <descr2>aaaaaaaaaaa</descr3>
      <descr3>aaaaaaaaaaa</descr3>
      <descr4>aaaaaaaaaaa</descr4>
   </row>
   <row>
      <ID>2</ID>
      <Value>AAAAA</Value>
      <Number>2</Number>
      <descr1>aaaaaaaaaaa</descr1>
      <descr2>aaaaaaaaaa</descr2>
      <descr3>aaaaaaaa</descr3>
      <descr4>aaaaaaaaaaaa</descr4>
   </row>
   <row>
      <Id>3</Id>
      <Value>AAAAA</Value>
      <Number>3</Number>
      
<descr1>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</descr1>
      <descr2>aaaaaaaaaaa</descr2>
      <descr3>aaaaaaaaaaa</descr3>
      <descr4>aaaaaaaaaaa</descr4>
   </row>
</root>


Thanks,
Rahul.
XSL-List info and archive
EasyUnsubscribe (by email)



-- 
Adam Retter

skype: adam.retter
tweet: adamretter
http://www.adamretter.org.uk
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--

<Prev in Thread] Current Thread [Next in Thread>