0

Below is the structure of my input and I need it in XSLT 1.0.

Please help with this at your earliest posisble.I tried muenchian grouping but unable to understand and make it work. Input will have Multiple AffiliatedAccounts nodes,each AffiliatedAccounts will have one or more child Designations nodes and each Designations>in turn will have only one Contacts node under it. I need to group AffiliatedAccounts based on ChildAccountNum field and then for each of the Matching AffiliatedAccounts need to group the Designations based on DesignationId field and then for each Designations need to group Contacts based on CustomerNum field.

Below is my input:

<root>
    <SPO_ID>MTT017</SPO_ID>
    <AccountNumber>60000061</AccountNumber>
    <AccountName>IEEE Microwave Theory and Techniques Society</AccountName>
    <AffiliatedAccounts>
        <ChildAccountName>abc</ChildAccountName>
        <ChildAccountNum>11</ChildAccountNum>
        <Designations>
            <DesignationName>Chapter</DesignationName>
            <Desn_group>Chapter Officers</Desn_group>
            <DesignationID>1</DesignationID>
            <DesignationAlias/>
            <Contacts>
                <CustomerNum>1111</CustomerNum>
                <FirstName>newtest</FirstName>
                <LastName>M</LastName>
            </Contacts>
        </Designations>
    </AffiliatedAccounts>
    <AffiliatedAccounts>
        <ChildAccountName>abc</ChildAccountName>
        <ChildAccountNum>11</ChildAccountNum>
        <Designations>
            <DesignationName>Chapter</DesignationName>
            <Desn_group>Chapter Officers</Desn_group>
            <DesignationID>1</DesignationID>
            <DesignationAlias/>
            <Contacts>
                <Contacts>
                    <CustomerNum>2222</CustomerNum>
                    <FirstName>test</FirstName>
                    <LastName>M</LastName>
                </Contacts>
            </Designations>
        </AffiliatedAccounts>
        <AffiliatedAccounts>
            <ChildAccountName>Test</ChildAccountName>
            <ChildAccountNum>12</ChildAccountNum>
            <Designations>
                <DesignationName>Chapter</DesignationName>
                <Desn_group>Chapter Officers</Desn_group>
                <DesignationID>2</DesignationID>
                <DesignationAlias/>
                <Contacts>
                    <CustomerNum>3333</CustomerNum>
                    <FirstName>newtest</FirstName>
                    <LastName>M</LastName>
                </Contacts>
            </Designations>
        </AffiliatedAccounts>
        <AffiliatedAccounts>
            <ChildAccountName>Test</ChildAccountName>
            <ChildAccountNum>12</ChildAccountNum>
            <Designations>
                <DesignationName>Chapter</DesignationName>
                <Desn_group>Chapter Officers</Desn_group>
                <DesignationID>3</DesignationID>
                <DesignationAlias/>
                <Contacts>
                    <CustomerNum>4444</CustomerNum>
                    <FirstName>newtest</FirstName>**strong text**
                    <LastName>M</LastName>
                </Contacts>
            </Designations>
        </AffiliatedAccounts>
    </root>

Below is expected output:

<root>
    <SPO_ID>MTT017</SPO_ID>
    <AccountNumber>60000061</AccountNumber>
    <AccountName>IEEE Microwave Theory and Techniques Society</AccountName>
    <AffiliatedAccounts>
        <ChildAccountName>abc</ChildAccountName>
        <ChildAccountNum>11</ChildAccountNum>
        <Designations>
            <DesignationName>Chapter</DesignationName>
            <Desn_group>Chapter Officers</Desn_group>
            <DesignationID>1</DesignationID>
            <DesignationAlias/>
            <Contacts>
                <CustomerNum>1111</CustomerNum>
                <FirstName>newtest</FirstName>
                <LastName>M</LastName>
            </Contacts>
            <Contacts>
                <CustomerNum>2222</CustomerNum>
                <FirstName>test</FirstName>
                <LastName>M</LastName>
            </Contacts>
        </Designations>
    </AffiliatedAccounts>
    <AffiliatedAccounts>
        <ChildAccountName>Test</ChildAccountName>
        <ChildAccountNum>12</ChildAccountNum>
        <Designations>
            <DesignationName>Chapter</DesignationName>
            <Desn_group>Chapter Officers</Desn_group>
            <DesignationID>2</DesignationID>
            <DesignationAlias/>
            <Contacts>
                <CustomerNum>3333</CustomerNum>
                <FirstName>newtest</FirstName>
                <LastName>M</LastName>
            </Contacts>
        </Designations>
        <Designations>
            <DesignationName>Chapter</DesignationName>
            <Desn_group>Chapter Officers</Desn_group>
            <DesignationID>3</DesignationID>
            <DesignationAlias/>
            <Contacts>
                <CustomerNum>4444</CustomerNum>
                <FirstName>newtest</FirstName>
                <LastName>M</LastName>
            </Contacts>
        </Designations>
    </AffiliatedAccounts>
</root>

Below is the code I tried but I dont know how to use menchuian grouping,it was just a try and its not grouping the designations and Contacts nodes correctly.

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:UUIDUserFunction="http://www.oracle.com/XSL/Transform/java/com.bea.wli.sb.stages.functions.UUIDUserFunction" xmlns:IsUserInGroupFunction="http://www.oracle.com/XSL/Transform/java/com.bea.wli.sb.stages.functions.IsUserInGroupFunction" xmlns:oraext="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc" xmlns:IsUserInRoleFunction="http://www.oracle.com/XSL/Transform/java/com.bea.wli.sb.stages.functions.IsUserInRoleFunction" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20" xmlns:DVMFunctions="http://www.oracle.com/XSL/Transform/java/com.bea.wli.sb.functions.dvm.DVMFunctions" xmlns:oracle-xsl-mapper="http://www.oracle.com/xsl/mapper/schemas" xmlns:oraxsl="http://www.oracle.com/XSL/Transform/java" xmlns:RuntimeTypeConversionFunctions="http://www.oracle.com/XSL/Transform/java/com.bea.wli.sb.stages.functions.RuntimeTypeConversionFunctions" xmlns:XrefFunctions="http://www.oracle.com/XSL/Transform/java/com.bea.wli.sb.functions.xref.XrefFunctions" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:BasicCredentialsUserFunction="http://www.oracle.com/XSL/Transform/java/com.bea.wli.sb.stages.functions.BasicCredentialsUserFunction" exclude-result-prefixes=" xsd oracle-xsl-mapper xsi xsl UUIDUserFunction IsUserInGroupFunction oraext IsUserInRoleFunction xp20 DVMFunctions oraxsl RuntimeTypeConversionFunctions XrefFunctions BasicCredentialsUserFunction">
  <!-- <oracle-xsl-mapper:schema> -->
      <!--SPECIFICATION OF MAP SOURCES AND TARGETS, DO NOT MODIFY.-->
   <!--   <oracle-xsl-mapper:mapSources>
         <oracle-xsl-mapper:source type="XSD">
            <oracle-xsl-mapper:schema location="../Schema/GetSocietyOfficersResponse.xsd"/>
            <oracle-xsl-mapper:rootElement name="root" namespace=""/>
         </oracle-xsl-mapper:source>
      </oracle-xsl-mapper:mapSources>
      <oracle-xsl-mapper:mapTargets>
         <oracle-xsl-mapper:target type="XSD">
            <oracle-xsl-mapper:schema location="../Schema/GetSocietyOfficersResponse.xsd"/>
            <oracle-xsl-mapper:rootElement name="root" namespace=""/>
         </oracle-xsl-mapper:target>
      </oracle-xsl-mapper:mapTargets> -->
      <!--GENERATED BY ORACLE XSL MAPPER 12.2.1.0.0(XSLT Build 151013.0700.0085) AT [THU JUL 09 22:46:14 EDT 2020].-->
  <!-- </oracle-xsl-mapper:schema> -->
   <!--User Editing allowed BELOW this line - DO NOT DELETE THIS LINE-->
  <!-- <xsl:template match="/">
      <root/>
   </xsl:template> -->
   <xsl:output method="xml" indent="yes" />

  <xsl:key name="acct" match="AffiliatedAccounts" use="ChildAccountNum" />
  <xsl:key name="desig" match="Designations" use="concat(../ChildAccountNum, '|', DesignationID)" />

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

  <xsl:template match="root">
    <xsl:copy>
      <xsl:apply-templates select="AffiliatedAccounts[generate-id() = generate-id(key('acct', ChildAccountNum)[1])]" />
    </xsl:copy>
  </xsl:template>

  <xsl:template match="AffiliatedAccounts">
    <xsl:copy>
     <xsl:apply-templates select="node()|@*" />
      <xsl:apply-templates select="key('acct', ChildAccountNum)/Designations[generate-id() = generate-id(key('desig', concat(../ChildAccountNum, '|', DesignationID))[1])]" />
    </xsl:copy>
  </xsl:template>

   <xsl:template match="Designations">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*" />
      <xsl:apply-templates select="key('desig', concat(../ChildAccountNum, '|', DesignationID))/Contacts" />
    </xsl:copy>
  </xsl:template> 
</xsl:stylesheet>
Mark Schultheiss
  • 32,614
  • 12
  • 69
  • 100
Punya
  • 1
  • 1

0 Answers0