Can someone please help me out with this scenario asap?
Input XML:
<dataXML>
<Items>
<itemLine>
<lineNo>1</lineNo>
<lineRefNo>001</lineRefNo>
<lineDes>test1</lineDes>
</itemLine>
<itemLine>
<lineNo>2</lineNo>
<lineRefNo>001</lineRefNo>
<lineDes>test2</lineDes>
</itemLine>
<itemLine>
<lineNo>3</lineNo>
<lineRefNo>002</lineRefNo>
<lineDes>test3</lineDes>
</itemLine>
<itemLine>
<lineNo>4</lineNo>
<lineRefNo>002</lineRefNo>
<lineDes>test4</lineDes>
</itemLine>
<itemLine>
<lineNo>5</lineNo>
<lineRefNo>002</lineRefNo>
<lineDes>test5</lineDes>
</itemLine>
<itemLine>
<lineNo>6</lineNo>
<lineRefNo>003</lineRefNo>
<lineDes>test6</lineDes>
</itemLine>
</Items>
I have regrouped item lines based on LineRefNo
Transformation xsl:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:variable name="totalLine" select="count(dataXML/Items/itemLine)" />
<Root>
<xsl:value-of select="concat('<','test','>')" disable-output-escaping="yes"/>
<xsl:for-each select="dataXML/Items/itemLine">
<xsl:choose>
<xsl:when test="lineRefNo != preceding-sibling::itemLine[1]/lineRefNo">
<xsl:value-of select="concat('</','test','>')" disable-output-escaping="yes"/>
<xsl:value-of select="concat('<','test','>')" disable-output-escaping="yes"/>
<item>
<xsl:value-of select="concat('Line No : ',position())" />,<xsl:value-of select="lineRefNo" />
</item>
<xsl:if test="$totalLine = position()">
<xsl:value-of select="concat('</','test','>')" disable-output-escaping="yes"/>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<item>
<xsl:value-of select="concat('Line No : ',position())" />,<xsl:value-of select="lineRefNo" />
</item>
<xsl:if test="$totalLine = position()">
<xsl:value-of select="concat('</','test','>')" disable-output-escaping="yes"/>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</Root>
</xsl:template>
</xsl:stylesheet>
Note : Please escape ‘>’ and ‘<‘ in xslt transformation where Test and Item tags are used
It will transform input xml as below result
**Result :**
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<test>
<item>Line No : 1,001</item>
<item>Line No : 2,001</item>
</test>
<test>
<item>Line No : 3,002</item>
<item>Line No : 4,002</item>
<item>Line No : 5,002</item>
</test>
<test>
<item>Line No : 6,003</item>
</test>
</Root>
**Expected Result:**
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<test>
<item>Line No : 1,001</item>
<item>Line No : 2,001</item>
</test>
<test>
<item>Line No : 1,002</item>
<item>Line No : 2,002</item>
<item>Line No : 3,002</item>
</test>
<test>
<item>Line No : 1,003</item>
</test>
</Root>
Thanking in Advance
This transformation:
when applied on the provided XML document:
produces the wanted, correct result: