xsl-list
[Top] [All Lists]

Re: [xsl] XSL for CSV to XML

2019-02-14 07:07:20
You may find the code I used in these stylesheets to be helpful:

https://cranesoftwrights.github.io/resources/#csv

. . . . . Ken

At 2019-02-14 05:53 +0000, Rahul Singh rahulsinghindia15(_at_)gmail(_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>http://www.w3.org/1999/XSL/Transform"; xmlns:xs="<http://www.w3.org/2001/XMLSchema>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.
<http://www.mulberrytech.com/xsl/xsl-list>XSL-List info and archive
<http://lists.mulberrytech.com/unsub/xsl-list/96802>EasyUnsubscribe (<>by email)


--
Contact info, blog, articles, etc. http://www.CraneSoftwrights.com/s/ |
Check our site for free XML, XSLT, XSL-FO and UBL developer resources |
Streaming hands-on XSLT/XPath 2 training class @ US$45 (5 hours free) |
--~----------------------------------------------------------------
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>