Skip to Main Content

DevOps, CI/CD and Automation

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

how to get distinct values in xslt?

913349Nov 14 2013

Hi all,

I have the XSLT as below:

[code]

   lxsl := '<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>

   

<xsl:key name="rpt" match="*" use="REPORT_TYPE"/>

  <xsl:key name="cmp" match="*" use="concat(REPORT_TYPE, &apos;-&apos;, AUDIT_COMPANY)"/>

  <xsl:key name="tpa" match="*" use="concat(concat(REPORT_TYPE, &apos;-&apos;, AUDIT_COMPANY), &apos;-&apos;, TPA_AUDITOR)"/>

  <xsl:key name="asg" match="*" use="concat(concat(concat(REPORT_TYPE, &apos;-&apos;, AUDIT_COMPANY), &apos;-&apos;, TPA_AUDITOR), &apos;-&apos;, ASSIGNMENTS)"/>

 

  <xsl:template match="/">

    <xsl:apply-templates select="ROWSET"/>
</xsl:template>

   

<xsl:template match="/ROWSET">
    <xsl:for-each select="*[generate-id() = generate-id(key(&apos;rpt&apos;, REPORT_TYPE )[1])]">
        <xsl:if test="not(position() = 1)">
        <xsl:text>,</xsl:text>
        </xsl:if>
  "<xsl:value-of select="REPORT_TYPE"/>":[
      <xsl:apply-templates select="key(&apos;rpt&apos;, REPORT_TYPE )" mode="grouped-rpt"/>
   ]
    </xsl:for-each>
    }
</xsl:template>

   

<xsl:template match="*" mode="grouped-rpt">
    <xsl:if test="not(position() = 1)">
        <xsl:text>,</xsl:text>
    </xsl:if>
    {
    <xsl:apply-templates select="*" mode="inner"/>,
  "AUDIT_COMPANIES":[
    <xsl:variable name="RT" select="REPORT_TYPE"></xsl:variable>
    <xsl:for-each select="../*[generate-id() = generate-id(key(&apos;cmp&apos;, concat($RT, &apos;-&apos;, AUDIT_COMPANY) )[1])]">
      <xsl:if test="position() &gt; 1">
         <xsl:text>,</xsl:text>
         <xsl:text>&#10;</xsl:text>
    </xsl:if>
      {
  <xsl:apply-templates select="AUDIT_COMPANY" mode="grouped-cmp"/>
   <xsl:apply-templates select="*" mode="grouped-cmp"/>,
  "AUDITORS":[
    <xsl:variable name="RT" select="REPORT_TYPE"></xsl:variable>
    <xsl:variable name="AC" select="AUDIT_COMPANY"></xsl:variable>
    <xsl:for-each select="../*[generate-id() = generate-id(key(&apos;tpa&apos;, concat(concat($RT, &apos;-&apos;, $AC), &apos;-&apos;, TPA_AUDITOR) )[1])]">
      <xsl:if test="position() &gt; 1">
         <xsl:text>,</xsl:text>
         <xsl:text>&#10;</xsl:text>
    </xsl:if>
      {
      <xsl:apply-templates select="*" mode="grouped-tpa"/>,
          "ASSIGNMENTS":[
          <xsl:variable name="RT" select="REPORT_TYPE"></xsl:variable>
          <xsl:variable name="AC" select="AUDIT_COMPANY"></xsl:variable>
          <xsl:variable name="TA" select="TPA_AUDITOR"></xsl:variable>
          <xsl:for-each select="../*[generate-id() = generate-id(key(&apos;asg&apos;, concat(concat(concat($RT, &apos;-&apos;, $AC), &apos;-&apos;, $TA), &apos;-&apos;, ASSIGNMENTS) )[1])]">
            <xsl:if test="position() &gt; 1">
               <xsl:text>,</xsl:text>
               <xsl:text>&#10;</xsl:text>
            </xsl:if>
            {
            <xsl:apply-templates select="*" mode="grouped-asg"/>
            }
          </xsl:for-each>
        ]
      }
    </xsl:for-each>
    ]
  }
    </xsl:for-each>
]
}
</xsl:template>

<xsl:template match="*" mode="inner">
    <xsl:if test="position() &gt; 1 and position() &lt; 34">
  <xsl:text>,</xsl:text>
  <xsl:text>&#10;</xsl:text>
    </xsl:if>
<xsl:if test="position()&lt;34">
  <xsl:text>"</xsl:text>
  <xsl:value-of select="name()"/>
  <xsl:text>":"</xsl:text>
  <xsl:value-of select="text()"/>
  <xsl:text>"</xsl:text>
    </xsl:if>
</xsl:template>

 

<xsl:template match="*" mode="grouped-cmp">
  <xsl:if test="position()=34">
  <xsl:text>"</xsl:text>
  <xsl:value-of select="name()"/>
  <xsl:text>":"</xsl:text>
  <xsl:value-of select="text()"/>
  <xsl:text>"</xsl:text>
  </xsl:if>
</xsl:template>

   

<xsl:template match="*" mode="grouped-tpa">
  <xsl:if test="position() = 36">
    <xsl:text>,</xsl:text>
    <xsl:text>&#10;</xsl:text>
  </xsl:if>
  <xsl:if test="position()&gt;34 and position()&lt;37">
  <xsl:text>"</xsl:text>
  <xsl:value-of select="name()"/>
  <xsl:text>":"</xsl:text>
  <xsl:value-of select="text()"/>
  <xsl:text>"</xsl:text>
  </xsl:if>
</xsl:template>

   

<xsl:template match="*" mode="grouped-asg">
  <xsl:if test="position() = 37">
   <xsl:text>"</xsl:text>
   <xsl:value-of select="name()"/>
   <xsl:text>":"</xsl:text>
   <xsl:value-of select="text()"/>
   <xsl:text>"</xsl:text>
  </xsl:if>
</xsl:template>

</xsl:stylesheet>';

[/code]

Now I want to get the distinct values from starting column till my 34th column i.e. till AUDIT_COMPANY grouping .

Thnaks

Damby

Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Dec 12 2013
Added on Nov 14 2013
0 comments
2,249 views