[xsl] XSL for CSV to XML

Subject: [xsl] XSL for CSV to XML
From: "Rahul Singh rahulsinghindia15@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 14 Feb 2019 05:53:06 -0000
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.

Current Thread