ALL 5 template xslt mapping of sap pi po examples.

 


<?xml version="1.0" encoding="UTF-8"?>

<MapExampleFlatStructureMessage>


    <!-- This person will be included (Id 5 < 10) and has multiple phone numbers. -->

    <Person>

        <Id>5</Id>

        <Name>Alice Smith</Name>

        <TelephoneNumber>555-1234</TelephoneNumber>

        <TelephoneNumber>555-5678</TelephoneNumber>

    </Person>


    <!-- This person will be included (Id 9 < 10). -->

    <Person>

        <Id>9</Id>

        <Name>Bob Johnson</Name>

        <TelephoneNumber>555-9012</TelephoneNumber>

    </Person>


    <!-- This person will be excluded (Id 12 is NOT < 10). -->

    <Person>

        <Id>12</Id>

        <Name>Charlie Brown</Name>

        <TelephoneNumber>555-3456</TelephoneNumber>

    </Person>


    <!-- This person will be included (Id 1 < 10). -->

    <Person>

        <Id>1</Id>

        <Name>David Lee</Name>

        <TelephoneNumber>555-7890</TelephoneNumber>

    </Person>

     <Person>

        <Id>11</Id>

        <Name>David Lee</Name>

        <TelephoneNumber>555-78901</TelephoneNumber>

    </Person>


</MapExampleFlatStructureMessage>

-----------

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0"

    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">


    <xsl:output method="xml" indent="yes"/>


    <!-- Identity template: copies all nodes and attributes by default -->

    <xsl:template match="@* | node()">

        <xsl:copy>

            <xsl:apply-templates select="@* | node()"/>

        </xsl:copy>

    </xsl:template>


    <!-- Template to process the root element and apply the filter -->

    <xsl:template match="MapExampleFlatStructureMessage">

        <xsl:copy>

            <!--

                Filtering logic: Selects all 'Person' nodes where the child 'Id'

                element's value is less than 10.

            -->

            <xsl:for-each select="Person[Id &lt; 10]">

                <!-- Copies the entire matching Person node and all its contents -->

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

            </xsl:for-each>

        </xsl:copy>

    </xsl:template>


</xsl:stylesheet>


----------

<?xml version="1.0" encoding="UTF-8"?>

<MapExampleFlatStructureMessage>

   <Person>

      <Id>5</Id>

      <Name>Alice Smith</Name>

      <TelephoneNumber>555-1234</TelephoneNumber>

      <TelephoneNumber>555-5678</TelephoneNumber>

   </Person>

   <Person>

      <Id>9</Id>

      <Name>Bob Johnson</Name>

      <TelephoneNumber>555-9012</TelephoneNumber>

   </Person>

   <Person>

      <Id>1</Id>

      <Name>David Lee</Name>

      <TelephoneNumber>555-7890</TelephoneNumber>

   </Person>

</MapExampleFlatStructureMessage>


----------------------------

----------------

<?xml version="1.0" encoding="UTF-8"?>

<MapExampleFlatStructureMessage>

   <Person>

      <Id>5</Id>

      <Name>Alice Smith</Name>

      <TelephoneNumber>555-1234</TelephoneNumber>

   </Person>

   

   <Person>

      <Id>9</Id>

      <Name>Bob Johnson</Name>

      <TelephoneNumber>555-9012</TelephoneNumber>

   </Person>

   <Person>

      <Id>5</Id>

      <Name>Alice Smith</Name>

      <TelephoneNumber>555-5678</TelephoneNumber>

   </Person>

   <Person>

      <Id>1</Id>

      <Name>David Lee</Name>

      <TelephoneNumber>555-7890</TelephoneNumber>

   </Person>

   <Person>

      <Id>1</Id>

      <Name>David Lee</Name>

      <TelephoneNumber>555-2222</TelephoneNumber>

   </Person>

</MapExampleFlatStructureMessage>

-------------

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" 

    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">


    <xsl:output method="xml" indent="yes"/>


    <!-- Key for Muenchian Grouping: Unique identifier is the concatenation of Id and Name -->

    <xsl:key name="kPerson" match="Person" use="concat(Id, '|', Name)"/>


    <!-- Template for the root element -->

    <xsl:template match="MapExampleFlatStructureMessage">

        <xsl:copy>

            <!-- 

                1. Selects the first occurrence of each unique Person (Muenchian Grouping)

                2. Filters this unique set: ONLY keep Person where the Id value is less than 10 

            -->

            <xsl:for-each select="Person[generate-id() = generate-id(key('kPerson', concat(Id, '|', Name))[1]) 

                                    and Id &lt; 10]">

                <xsl:call-template name="create-person-record"/>

            </xsl:for-each>

        </xsl:copy>

    </xsl:template>


    <!-- Template to construct the output Person element -->

    <xsl:template name="create-person-record">

        <Person>

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

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

            

            <!-- 

                Collect all TelephoneNumbers from ALL source Person nodes 

                that belong to this unique group (i.e., share the same Id/Name).

            -->

            <xsl:copy-of select="key('kPerson', concat(Id, '|', Name))/TelephoneNumber"/>

        </Person>

    </xsl:template>


    <!-- Suppress text nodes and default templates (Identity template is NOT used) -->

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

    <xsl:template match="@* | node()"/>


</xsl:stylesheet>


----------

<?xml version="1.0" encoding="UTF-8"?>

<MapExampleFlatStructureMessage>

   <Person>

      <Id>5</Id>

      <Name>Alice Smith</Name>

      <TelephoneNumber>555-1234</TelephoneNumber>

      <TelephoneNumber>555-5678</TelephoneNumber>

   </Person>

   <Person>

      <Id>9</Id>

      <Name>Bob Johnson</Name>

      <TelephoneNumber>555-9012</TelephoneNumber>

   </Person>

   <Person>

      <Id>1</Id>

      <Name>David Lee</Name>

      <TelephoneNumber>555-7890</TelephoneNumber>

      <TelephoneNumber>555-2222</TelephoneNumber>

   </Person>

</MapExampleFlatStructureMessage>

---------------

EXAMPLE 3

<?xml version="1.0" encoding="UTF-8"?>

<MapExampleFlatStructureMessage>

   <Person>

      <Id>5</Id>

      <Name>Alice Smith</Name>

      <TelephoneNumber>555-1234</TelephoneNumber>

      <TelephoneNumber>555-5678</TelephoneNumber>

   </Person>

   <Person>

      <Id>9</Id>

      <Name>Bob Johnson</Name>

      <TelephoneNumber>555-9012</TelephoneNumber>

   </Person>

   <Person>

      <Id>1</Id>

      <Name>David Lee</Name>

      <TelephoneNumber>555-7890</TelephoneNumber>

      <TelephoneNumber>555-2222</TelephoneNumber>

   </Person>

</MapExampleFlatStructureMessage>

----------

XSLT

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0"

    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="xml" indent="yes" encoding="UTF-8"/>

  <xsl:strip-space elements="*"/>


  <!-- Match root element -->

  <xsl:template match="/MapExampleFlatStructureMessage">

    <MapExampleFlatStructureMessage>

      <!-- Loop over each Person -->

      <xsl:for-each select="Person">

        <!-- Filter only Persons with Id < 10 -->

        <xsl:if test="number(Id) &lt; 10">

          <!-- Cache Id and Name for reuse -->

          <xsl:variable name="pid" select="Id"/>

          <xsl:variable name="pname" select="Name"/>

          <!-- Loop over all TelephoneNumber elements -->

          <xsl:for-each select="TelephoneNumber">

            <Person>

              <Id><xsl:value-of select="$pid"/></Id>

              <Name><xsl:value-of select="$pname"/></Name>

              <TelephoneNumber><xsl:value-of select="."/></TelephoneNumber>

            </Person>

          </xsl:for-each>

        </xsl:if>

      </xsl:for-each>

    </MapExampleFlatStructureMessage>

  </xsl:template>


</xsl:stylesheet>

------------------

<?xml version="1.0" encoding="UTF-8"?>

<MapExampleFlatStructureMessage>

   <Person>

      <Id>5</Id>

      <Name>Alice Smith</Name>

      <TelephoneNumber>555-1234</TelephoneNumber>

   </Person>

   <Person>

      <Id>5</Id>

      <Name>Alice Smith</Name>

      <TelephoneNumber>555-5678</TelephoneNumber>

   </Person>

   <Person>

      <Id>9</Id>

      <Name>Bob Johnson</Name>

      <TelephoneNumber>555-9012</TelephoneNumber>

   </Person>

   <Person>

      <Id>1</Id>

      <Name>David Lee</Name>

      <TelephoneNumber>555-7890</TelephoneNumber>

   </Person>

   <Person>

      <Id>1</Id>

      <Name>David Lee</Name>

      <TelephoneNumber>555-2222</TelephoneNumber>

   </Person>

</MapExampleFlatStructureMessage>

---------------

EXAMPLE 4

<MapExampleTwoTablesMessage>

  <Persons>

    <Person>

      <Id>101</Id>

      <Name>John</Name>

    </Person>

    <Person>

      <Id>102</Id>

      <Name>Mary</Name>

    </Person>

  </Persons>

  <Telephones>

    <Telephone>

      <PersonId>101</PersonId>

      <Number>1111111111</Number>

    </Telephone>

    <Telephone>

      <PersonId>101</PersonId>

      <Number>2222222222</Number>

    </Telephone>

    <Telephone>

      <PersonId>102</PersonId>

      <Number>3333333333</Number>

    </Telephone>

     <Telephone>

      <PersonId>101</PersonId>

      <Number>2222222223</Number>

    </Telephone>

  </Telephones>

</MapExampleTwoTablesMessage>

--------------

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" 

    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">


  <xsl:output method="xml" indent="yes"/>


  <xsl:template match="/">

    <MapExampleTwoTablesMessage>

      <xsl:for-each select="MapExampleTwoTablesMessage/Telephones/Telephone">

        <xsl:variable name="pid" select="PersonId"/>

        <xsl:variable name="person" select="/MapExampleTwoTablesMessage/Persons/Person[Id=$pid]" />


        <Person>

          <Id><xsl:value-of select="$person/Id"/></Id>

          <Name><xsl:value-of select="$person/Name"/></Name>

          <TelephoneNumber><xsl:value-of select="Number"/></TelephoneNumber>

        </Person>

      </xsl:for-each>

    </MapExampleTwoTablesMessage>

  </xsl:template>


</xsl:stylesheet>

-------------

<?xml version="1.0" encoding="UTF-8"?>

<MapExampleTwoTablesMessage>

   <Person>

      <Id>101</Id>

      <Name>John</Name>

      <TelephoneNumber>1111111111</TelephoneNumber>

   </Person>

   <Person>

      <Id>101</Id>

      <Name>John</Name>

      <TelephoneNumber>2222222222</TelephoneNumber>

   </Person>

   <Person>

      <Id>102</Id>

      <Name>Mary</Name>

      <TelephoneNumber>3333333333</TelephoneNumber>

   </Person>

   <Person>

      <Id>101</Id>

      <Name>John</Name>

      <TelephoneNumber>2222222223</TelephoneNumber>

   </Person>

</MapExampleTwoTablesMessage>


------------

example 5:

<MapExampleTwoTablesMessage>

  <Persons>

    <Person>

      <Id>101</Id>

      <Name>John</Name>

    </Person>

    <Person>

      <Id>102</Id>

      <Name>Mary</Name>

    </Person>

  </Persons>

  <Telephones>

    <Telephone>

      <PersonId>101</PersonId>

      <Number>1111111111</Number>

    </Telephone>

    <Telephone>

      <PersonId>101</PersonId>

      <Number>2222222222</Number>

    </Telephone>

    <Telephone>

      <PersonId>102</PersonId>

      <Number>3333333333</Number>

    </Telephone>

     <Telephone>

      <PersonId>101</PersonId>

      <Number>2222222223</Number>

    </Telephone>

  </Telephones>

</MapExampleTwoTablesMessage>


----------

<?xml version="1.0" encoding="UTF-8"?>

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

  <xsl:output method="xml" indent="yes"/>


  <xsl:template match="/">

    <MapExampleNestedTablesMessage>

      <xsl:for-each select="MapExampleTwoTablesMessage/Persons/Person">

        <xsl:variable name="pid" select="Id"/>


        <Person>

          <Id><xsl:value-of select="Id"/></Id>

          <Name><xsl:value-of select="Name"/></Name>


          <Telephones>

            <xsl:for-each select="/MapExampleTwoTablesMessage/Telephones/Telephone[PersonId = $pid]">

              <TelephoneNumber><xsl:value-of select="Number"/></TelephoneNumber>

            </xsl:for-each>

          </Telephones>

        </Person>

      </xsl:for-each>

    </MapExampleNestedTablesMessage>

  </xsl:template>


</xsl:stylesheet>

----------

<?xml version="1.0" encoding="UTF-8"?>

<MapExampleNestedTablesMessage>

   <Person>

      <Id>101</Id>

      <Name>John</Name>

      <Telephones>

         <TelephoneNumber>1111111111</TelephoneNumber>

         <TelephoneNumber>2222222222</TelephoneNumber>

      </Telephones>

   </Person>

   <Person>

      <Id>102</Id>

      <Name>Mary</Name>

      <Telephones>

         <TelephoneNumber>3333333333</TelephoneNumber>

      </Telephones>

   </Person>

</MapExampleNestedTablesMessage>




Popular posts from this blog

praveen samples: idoc2edi: step by tpm configuration, with payloads

50 questoins of grok questions.

SAP CPI : camle expression in sap cpi , cm, router, filter and groovy script. format