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 < 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 < 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) < 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>