Have you checked the following link:
How to get comma separated values as an array from a string?
Gayara Kumari
65
Reputation points
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.
Developer technologies C#
11,567 questions
Accepted answer
-
Reza Aghaei 4,986 Reputation points MVP Volunteer Moderator
2023-01-27T09:00:12.6+00:00
1 additional answer
Sort by: Most helpful
-
Yitzhak Khabinsky 26,586 Reputation points
2023-01-30T14:58:31.1333333+00:00 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>