Re: [xsl] XSL for CSV to XML

Subject: Re: [xsl] XSL for CSV to XML
From: "Adam Retter adam.retter@xxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 14 Feb 2019 08:29:44 -0000
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@xxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> 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

Current Thread