Home Page › Forums › BizTalk 2004 – BizTalk 2010 › XSLT to form nested xml structure
- This topic has 0 replies, 1 voice, and was last updated 9 years, 2 months ago by
community-content.
-
AuthorPosts
-
-
July 22, 2010 at 11:02 AM #25347
Hi
Missing nodes highlighted in yellow
INPUT:
<ns0:Root xmlns:ns0=“http://EDIAD_POC_Mapping.EDIAD_HD“>
<Record>
<VID>ABC</VID>
<VREF>VREF1</VREF>
<MOVE>MOVENO_1</MOVE>
<TANKNO>TA01TNO001A</TANKNO>
<CHARGE>
<CCODE>CCODE_1</CCODE>
<TEXT>TEXT_1</TEXT>
</CHARGE>
<CHARGE>
<CCODE>CCODE_2</CCODE>
<TEXT>TEXT_2</TEXT>
</CHARGE>
</Record>
<Record>
<VID>ABC</VID>
<VREF>VREF1</VREF>
<MOVE>MOVENO_1</MOVE>
<TANKNO>TA02TNO002B</TANKNO>
<CHARGE>
<CCODE>CCODE_3</CCODE>
<TEXT>TEXT_3</TEXT>
</CHARGE>
<CHARGE>
<CCODE>CCODE_4</CCODE>
<TEXT>TEXT_4</TEXT>
</CHARGE>
</Record>
<Record>
<VID>ABC</VID>
<VREF>VREF1</VREF>
<MOVE>MOVENO_2</MOVE>
<TANKNO>TA03TNO003C</TANKNO>
<CHARGE>
<CCODE>CCODE_5</CCODE>
<TEXT>TEXT_5</TEXT>
</CHARGE>
<CHARGE>
<CCODE>CCODE_6</CCODE>
<TEXT>TEXT_6</TEXT>
</CHARGE>
</Record>
<Record>
<VID>ABC</VID>
<VREF>VREF1</VREF>
<MOVE>MOVENO_2</MOVE>
<TANKNO>TA04TNO004D</TANKNO>
<CHARGE>
<CCODE>CCODE_7</CCODE>
<TEXT>TEXT_7</TEXT>
</CHARGE>
<CHARGE>
<CCODE>CCODE_8</CCODE>
<TEXT>TEXT_8</TEXT>
</CHARGE>
</Record>
</ns0:Root>
REQUIRED OUTPUT:
<ns0:Root xmlns:ns0=“http://EDIAD_POC_Mapping.EDIAD_HD“>
<Record>
<VID>ABC</VID>
<VREF>VREF1</VREF>
<MOVE>MOVENO_1</MOVE>
<TANK>
<TANKNO>TA01TNO001A</TANKNO>
<CHARGE>
<CCODE>CCODE_1</CCODE>
<TEXT>TEXT_1</TEXT>
</CHARGE>
<CHARGE>
<CCODE>CCODE_2</CCODE>
<TEXT>TEXT_2</TEXT>
</CHARGE>
</TANK>
<TANK>
<TANKNO>TA02TNO002B</TANKNO>
<CHARGE>
<CCODE>CCODE_3</CCODE>
<TEXT>TEXT_3</TEXT>
</CHARGE>
<CHARGE>
<CCODE>CCODE_4</CCODE>
<TEXT>TEXT_4</TEXT>
</CHARGE>
</TANK>
</Record>
<Record>
<VID>ABC</VID>
<VREF>VREF1</VREF>
<MOVE>MOVENO_2</MOVE>
<TANK>
<TANKNO>TA03TNO003C</TANKNO>
<CHARGE>
<CCODE>CCODE_5</CCODE>
<TEXT>TEXT_5</TEXT>
</CHARGE>
<CHARGE>
<CCODE>CCODE_6</CCODE>
<TEXT>TEXT_6</TEXT>
</CHARGE>
</TANK>
<TANK>
<TANKNO>TA04TNO004D</TANKNO>
<CHARGE>
<CCODE>CCODE_7</CCODE>
<TEXT>TEXT_7</TEXT>
</CHARGE>
<CHARGE>
<CCODE>CCODE_8</CCODE>
<TEXT>TEXT_8</TEXT>
</CHARGE>
</TANK>
</Record>
</ns0:Root>
ACTUAL OUTPUT:
<ns0:Root xmlns:ns0=“http://EDIAD_POC_Mapping.EDIAD_HD“>
<Record>
<VID>ABC</VID>
<VREF>VREF1</VREF>
<MOVE>MOVENO_1</MOVE>
<TANK>
<TANKNO>TA01TNO001A</TANKNO>
<CHARGE>
<CCODE>CCODE_1</CCODE>
<TEXT>TEXT_1</TEXT>
</CHARGE>
</TANK>
<TANK>
<TANKNO>TA02TNO002B</TANKNO>
<CHARGE>
<CCODE>CCODE_3</CCODE>
<TEXT>TEXT_3</TEXT>
</CHARGE>
</TANK>
</Record>
<Record>
<VID>ABC</VID>
<VREF>VREF1</VREF>
<MOVE>MOVENO_2</MOVE>
<TANK>
<TANKNO>TA03TNO003C</TANKNO>
<CHARGE>
<CCODE>CCODE_5</CCODE>
<TEXT>TEXT_5</TEXT>
</CHARGE>
</TANK>
<TANK>
<TANKNO>TA04TNO004D</TANKNO>
<CHARGE>
<CCODE>CCODE_7</CCODE>
<TEXT>TEXT_7</TEXT>
</CHARGE>
</TANK>
</Record>
</ns0:Root>
XSLT (being used in Functoid in BizTalk:
<xsl:template name=”GroupByID2″>
<xsl:param name=”param3″/>
<xsl:param name=”param4″/>
<xsl:if test=”$param3=’true'”>
<xsl:element name=”Record”>
<xsl:element name=”VID”><xsl:value-of select=”VID”/></xsl:element>
<xsl:element name=”VREF”><xsl:value-of select=”VREF”/></xsl:element>
<xsl:element name=”MOVE”><xsl:value-of select=”MOVE”/></xsl:element>
<xsl:for-each select=”//Record[MOVE=$param4]”>
<xsl:element name=”TANK”>
<xsl:element name=”TANKNO”><xsl:value-of select=”TANKNO”/></xsl:element>
<xsl:element name=”CHARGE”>
<xsl:element name=”CCODE”><xsl:value-of select=”CHARGE/CCODE”/></xsl:element>
<xsl:element name=”TEXT”><xsl:value-of select=”CHARGE/TEXT”/></xsl:element>
</xsl:element>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:if>
</xsl:template>
1. I tried using nested for-each (shown below) but then the output is considering all the 8 CHARGE nodes and not just the ones under the TANKNO
<xsl:for-each select=”//Record[CHARGE]”>
<xsl:element name=”CHARGE”>
<xsl:element name=”CCODE”><xsl:value-of select=”CHARGE/CCODE”/></xsl:element>
<xsl:element name=”TEXT”><xsl:value-of select=”CHARGE/TEXT”/></xsl:element>
</xsl:element>
</xsl:for-each>
2. I tried using TANKNO=$param5 (shown below) but then the output is considering only the first node of the <CHARGE> loop
<xsl:for-each select=”//Record[TANKNO=$param5]”>
<xsl:element name=”CHARGE”>
<xsl:element name=”CCODE”><xsl:value-of select=”CHARGE/CCODE”/></xsl:element>
<xsl:element name=”TEXT”><xsl:value-of select=”CHARGE/TEXT”/></xsl:element>
</xsl:element>
</xsl:for-each>
3. Tried Recursive looping and <apply-template> also but just couldn’t get the right syntax J Need help
Thanks and regards
Aditya
-
-
AuthorPosts
- The forum ‘BizTalk 2004 – BizTalk 2010’ is closed to new topics and replies.