xsl-list
[Top] [All Lists]

Re: [xsl] Solution Needed for DB output

2009-04-18 14:05:53
balaganesh mohan wrote:

I am very new to xslt  and i know basics of xslt only.
I tried to achieve the above output via key() function as explained in your Mueneuch -2 ( grouping - thread)method. But i get the same output as the db output.

I use jdeveloper as designing tool and oracle soa suite 10.1.3.1.0 as server and xslt version 1.0 ( i dont know whether xslt 2.0 is supported in soa server)

Assuming the XML input is

<getMatrixOutputCllection>
<outputVar>
<level_id>1</level_id>
<assignee>jcooper</assignee>
<reg>1000</reg>
<gold>2000</gold>
<sublevel>1</sublevel>
<status>approve</status>
</outputVar>

<outputVar>
<level_id>1</level_id>
<assignee>jcooper</assignee>
<reg>1000</reg>
<gold>2000</gold>
<sublevel>1</sublevel>
<status>reject</status>
</outputVar>

<outputVar>
<level_id>1</level_id>
<assignee>jcooper</assignee>
<reg>1000</reg>
<gold>2000</gold>
<sublevel>2</sublevel>
<status>pending</status>
</outputVar>


<outputVar>
<level_id>1</level_id>
<assignee>jcooper</assignee>
<reg>1000</reg>
<gold>2000</gold>
<sublevel>3</sublevel>
<status>yes</status>
</outputVar>

<outputVar>
<level_id>1</level_id>
<assignee>jcooper</assignee>
<reg>1000</reg>
<gold>2000</gold>
<sublevel>3</sublevel>
<status>no</status>
</outputVar>


<outputVar>
<level_id>2</level_id>
<assignee>jstein</assignee>
<reg>6000</reg>
<gold>4000</gold>
<sublevel>1</sublevel>
<status>go</status>
</outputVar>


<outputVar>
<level_id>2</level_id>
<assignee>jstein</assignee>
<reg>6000</reg>
<gold>4000</gold>
<sublevel>2</sublevel>
<status>proceed</status>
</outputVar>

<outputVar>
<level_id>2</level_id>
<assignee>jstein</assignee>
<reg>6000</reg>
<gold>4000</gold>
<sublevel>2</sublevel>
<status>pending</status>
</outputVar>
</getMatrixOutputCllection>

then this XSLT stylesheet

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

  <xsl:output method="xml" indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:key name="lv" match="outputVar" use="level_id"/>
<xsl:key name="sl" match="sublevel" use="concat(parent::outputVar/level_id, '|', .)"/>

  <xsl:template match="/*">
    <xsl:copy>
<xsl:apply-templates select="outputVar[generate-id() = generate-id(key('lv', level_id)[1])]"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="outputVar">
    <xsl:copy-of select="level_id | assignee | reg | gold"/>
<xsl:apply-templates select="key('lv', level_id)/sublevel[generate-id() = generate-id(key('sl', concat(parent::outputVar/level_id, '|', .))[1])]"/>
  </xsl:template>

  <xsl:template match="sublevel">
    <xsl:copy-of select="."/>
<xsl:copy-of select="key('sl', concat(parent::outputVar/level_id, '|', .))/following-sibling::status[1]"/>
  </xsl:template>

</xsl:stylesheet>

creates the following output:

<getMatrixOutputCllection>
   <level_id>1</level_id>
   <assignee>jcooper</assignee>
   <reg>1000</reg>
   <gold>2000</gold>
   <sublevel>1</sublevel>
   <status>approve</status>
   <status>reject</status>
   <sublevel>2</sublevel>
   <status>pending</status>
   <sublevel>3</sublevel>
   <status>yes</status>
   <status>no</status>
   <level_id>2</level_id>
   <assignee>jstein</assignee>
   <reg>6000</reg>
   <gold>4000</gold>
   <sublevel>1</sublevel>
   <status>go</status>
   <sublevel>2</sublevel>
   <status>proceed</status>
   <status>pending</status>
</getMatrixOutputCllection>



--

        Martin Honnen
        http://msmvps.com/blogs/martin_honnen/

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>