[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] Siblings to child - Hierarchy


Subject: Re: [xsl] Siblings to child - Hierarchy
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Fri, 22 Aug 2003 13:52:57 -0400

Todd,

I'd approach this by defining a key that would let me retrieve row elements by their assigned parent:

<xsl:key name="row-by-parent" match="row" use="site-parent"/>

(Look up keys in a good reference to learn the details of how they work.) Then I'd design a template matching rows:

<xsl:template match="row">
<site>
<!-- first, do whatever I'm going to do -->
<xsl:copy-of select="site_name | site_ID"/>
...
<!-- then, process its "children" using my key -->
<xsl:apply-templates mode="in-group" select="key('row-by-parent', site_id)"/>
</site>
</xsl:template>


Doing this I'd get a recursive operation that would go all the way down the tree.

In order to prevent repeat occurrences, initiate this process only for rows with site-parent of 0:

<xsl:template name="rowset">
  <xsl:apply-templates select="row[site_parent = 0]
</xsl:template>

I hope that's enough to get you going -- cool problem.

Cheers,
Wendell

At 11:06 AM 8/22/2003, you wrote:
I am new to xsl and am having a tough time with a template to transform the
results of an oracle "connect by" query into a hierarchical xml document.

The xml results of a sample query is below:

<page>
  <rowset>
    <row>
      <site_id>1</site_id>
      <site_name>Test Parent1</site_name>
      <site_parent>0</site_parent>
      <level>1</level>
      <path>/0</path>
    </row>
    <row>
      <site_id>2</site_id>
      <site_name>Test Child1 of Test Parent1</site_name>
      <site_parent>1</site_parent>
      <level>2</level>
      <path>/0/1</path>
    </row>
    <row>
      <site_id>4</site_id>
      <site_name>Test Child1 of Test Child1</site_name>
      <site_parent>2</site_parent>
      <level>3</level>
      <path>/0/1/2</path>
    </row>
    <row>
      <site_id>3</site_id>
      <site_name>Test Parent2</site_name>
      <site_parent>0</site_parent>
      <level>1</level>
      <path>/0</path>
    </row>
  </rowset>
</page>

where the site_parent value is the site_id of it's parent and a site_parent
of 0 is a top-level node.

I would like to produce a hierarchical xml doc based upon these results of
the form

<site>
  <site_id>1</site_id>
  <site_name>Test Parent1</site_name>
  <site>
    <site_id>2</site_id>
    <site_name> Test Child1 of Test Parent1</site_name>
    <site>
      <site_id>4</site_id>
      <site_name>Test Child2 of Test Child1</site_name>
    </site>
  </site>
</site>
<site>
  <site_id>3</site>
  <site_name>Test Parent2</site_name>
</site>


======================================================================
Wendell Piez                            mailto:wapiez@xxxxxxxxxxxxxxxx
Mulberry Technologies, Inc.                http://www.mulberrytech.com
17 West Jefferson Street                    Direct Phone: 301/315-9635
Suite 207                                          Phone: 301/315-9631
Rockville, MD  20850                                 Fax: 301/315-8285
----------------------------------------------------------------------
  Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================


XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list




Current Thread
Keywords