cancel
Showing results for 
Search instead for 
Did you mean: 

XSLT Mapping for grouping and generate multiple files

nmuralicse
Explorer
0 Kudos

Hi

Could you please provide xslt code to generate below target structure.

Source:

MT_1

Record 1..unbound

Name  0..1

Hair_Colour  0..1

Address 0..1

      Street  0..1

      D.No 0..1

Target:

Target structure is same as source structure. Need to create multiple files by grouping all people based on their hair color.

for example single message with all the people who has white hair and one more message for black hair people somthing like that.

Thanks,

Krish

Accepted Solutions (0)

Answers (1)

Answers (1)

former_member190293
Active Contributor
0 Kudos

Hi, Krish!

Source message:

<ns1:MT_1 xmlns:ns1="urn://my_namespace">

<Record>

<Name>John Doe</Name>

<Hair_Colour>Black</Hair_Colour>

<Address>

<Street>John Doe Street</Street>

<D_No>1</D_No>

</Address>

</Record>

<Record>

<Name>Ann Doe</Name>

<Hair_Colour>White</Hair_Colour>

<Address>

<Street>Ann Doe Street</Street>

<D_No>2</D_No>

</Address>

</Record>

<Record>

<Name>James Kinn</Name>

<Hair_Colour>Brown</Hair_Colour>

<Address>

<Street>James Kinn Street</Street>

<D_No>3</D_No>

</Address>

</Record>

<Record>

<Name>Steve Lee</Name>

<Hair_Colour>White</Hair_Colour>

<Address>

<Street>Steve Lee Street</Street>

<D_No>4</D_No>

</Address>

</Record>

<Record>

<Name>Mary Ann</Name>

<Hair_Colour>Brown</Hair_Colour>

<Address>

<Street>Mary Ann Street</Street>

<D_No>5</D_No>

</Address>

</Record>

</ns1:MT_1>

XSLT transformation:

<?xml version='1.0'?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

   xmlns:ns0="http://sap.com/xi/XI/SplitAndMerge"

   xmlns:ns1="urn://my_namespace">

<xsl:output omit-xml-declaration="yes" indent="yes"/>

<xsl:template match="/*">

  <ns0:Messages>

  <xsl:apply-templates/>

  </ns0:Messages>

</xsl:template>

<xsl:template match="text()"/>

<xsl:template match="//Record[not(Hair_Colour/text()=preceding::Hair_Colour/text())]">

  <xsl:variable name="HC" select="Hair_Colour"/>

  <ns0:Message>

  <ns1:MT_1>

  <xsl:for-each select="../Record[Hair_Colour/text()=$HC]">

  <xsl:copy-of select="."/>

  </xsl:for-each>

  </ns1:MT_1>

  </ns0:Message>

</xsl:template>

</xsl:stylesheet>

Transformation result:

<ns0:Messages xmlns:ns1="urn://my_namespace" xmlns:ns0="http://sap.com/xi/XI/SplitAndMerge">

  <ns0:Message>

    <ns1:MT_1>

      <Record>

        <Name>John Doe</Name>

        <Hair_Colour>Black</Hair_Colour>

        <Address>

          <Street>John Doe Street</Street>

          <D_No>1</D_No>

        </Address>

      </Record>

    </ns1:MT_1>

  </ns0:Message>

  <ns0:Message>

    <ns1:MT_1>

      <Record>

        <Name>Ann Doe</Name>

        <Hair_Colour>White</Hair_Colour>

        <Address>

          <Street>Ann Doe Street</Street>

          <D_No>2</D_No>

        </Address>

      </Record>

      <Record>

        <Name>Steve Lee</Name>

        <Hair_Colour>White</Hair_Colour>

        <Address>

          <Street>Steve Lee Street</Street>

          <D_No>4</D_No>

        </Address>

      </Record>

    </ns1:MT_1>

  </ns0:Message>

  <ns0:Message>

    <ns1:MT_1>

      <Record>

        <Name>James Kinn</Name>

        <Hair_Colour>Brown</Hair_Colour>

        <Address>

          <Street>James Kinn Street</Street>

          <D_No>3</D_No>

        </Address>

      </Record>

      <Record>

        <Name>Mary Ann</Name>

        <Hair_Colour>Brown</Hair_Colour>

        <Address>

          <Street>Mary Ann Street</Street>

          <D_No>5</D_No>

        </Address>

      </Record>

    </ns1:MT_1>

  </ns0:Message>

</ns0:Messages>

Regards, Evgeniy.