An object-oriented and type-safe programming language that has its roots in the C family of languages and includes support for component-oriented programming.
Have you checked the following link:
This browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
We are using XSLT 1.0 mapping to transform one xml file to another xml.
We need to transform comma separated string into sequence of parent-child elements as below.
Input String
Expected Output
Please advise on this.
Thank You.
An object-oriented and type-safe programming language that has its roots in the C family of languages and includes support for component-oriented programming.
Answer accepted by question author
Have you checked the following link:
Hi @Gayara Kumari,
Please try the following solution.
Input XML
<?xml version="1.0" encoding="UTF-8"?>
<root>
<PONumber>100, 200, 770</PONumber>
</root>
XSLT 1.0
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="no"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="string" select="/root/PONumber"/>
<xsl:variable name="cnt" select="1"/>
<xsl:template match="/">
<OrderNumberCollection>
<xsl:call-template name="tokenize">
<xsl:with-param name="string" select="$string"/>
<xsl:with-param name="delim" select="','"/>
<xsl:with-param name="cnt" select="$cnt"/>
</xsl:call-template>
</OrderNumberCollection>
</xsl:template>
<xsl:template name="tokenize">
<xsl:param name="string"/>
<xsl:param name="delim"/>
<xsl:param name="cnt"/>
<xsl:choose>
<xsl:when test="contains($string, $delim)">
<OrderNumber>
<Sequence><xsl:value-of select="$cnt"/></Sequence>
<OrderReference>
<xsl:value-of select="normalize-space(substring-before($string, $delim))"/>
</OrderReference>
</OrderNumber>
<xsl:call-template name="tokenize">
<xsl:with-param name="string" select="substring-after($string, $delim)"/>
<xsl:with-param name="delim" select="$delim"/>
<xsl:with-param name="cnt" select="$cnt+1"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<OrderNumber>
<Sequence><xsl:value-of select="$cnt"/></Sequence>
<OrderReference>
<xsl:value-of select="normalize-space($string)"/>
</OrderReference>
</OrderNumber>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Output XML
<?xml version='1.0' encoding='utf-8' ?>
<OrderNumberCollection>
<OrderNumber>
<Sequence>1</Sequence>
<OrderReference>100</OrderReference>
</OrderNumber>
<OrderNumber>
<Sequence>2</Sequence>
<OrderReference>200</OrderReference>
</OrderNumber>
<OrderNumber>
<Sequence>3</Sequence>
<OrderReference>770</OrderReference>
</OrderNumber>
</OrderNumberCollection>