[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: Advice/feedback on stylesheet?

Subject: RE: Advice/feedback on stylesheet?
From: "Andreas L. Delmelle" <a_l.delmelle@xxxxxxxxxx>
Date: Sat, 27 Mar 2004 15:25:14 +0100
xpath no children
> -----Original Message-----
> From: Jim Stoll [mailto:jestoll@xxxxxxxxxx]
>
> Anyway, I'd like to know if/how I can do this in a smarter
> manner, if I've made any serious mis-steps or such, if this
> approach is likely to bring the machine to its knees for large
> datasets, etc. (this will be occurring on the database server).
>

Hi,

I notice you're not using xsl:key, which could reduce the stylesheet needed
to obtain the wanted output to:

<xsl:stylesheet ..>

<xsl:key name="nodes-by-parentrowid" match="NODE"
         use="PARENTROWID_" />

<xsl:template match="ROWSET">
  <xsl:apply-templates select="NODE[LEVEL_ = '1']" />
</xsl:template>

<xsl:template match="NODE">
  <xsl:copy>
    <xsl:copy-of select="*" />
    <CHILDREN>
      <xsl:apply-templates select="key('nodes-by-parentrowid'
                             ,ROWID_)" />
    </CHILDREN>
  </xsl:copy>
</xsl:template>

</xsl:stylesheet>

>  - the prevailing philosophy as regards whether to have an empty
> CHILDREN element (see below) if there are no children or not

Well, I personally prefer to have an empty element indicating the absence of
it, as opposed to not having a CHILDREN element at all...

>  - I've tried to make this as generic as possible, as I have
> opportunity to apply it to numerous situations, but have been
> unable to find a way to parameterize the ROWSET_, ROWID_ and
> PARENTROWID_ tag names (ie, to allow the user to set these to
> another value in their database query and pass parameters to the
> stylesheet naming their substituted values) - if anyone has any
> thoughts on this, I'd be very interested to hear them, as well.
> (It works as-is, and is an acceptable work-around, but I'd at
> least like to know if its possible.)
>

If you want to parametrize the element names, you can test for their value
in two ways:

a. the XPath predicate [name() = $parameter]:
unfortunately this does not work in match patterns...

<xsl:template match="*[name() = $parameter]"> is illegal because of
'$parameter'. Had this been a literal string, no problem.

b. the relative position of the node in question
examples: the LEVEL_ or ROWID_ nodes will always be the first and second
child nodes of a NODE, so you can get to them, whatever their names, through
the expressions 'NODE/*[1]' and 'NODE/*[2]'

other example: the PARENTROWID_ node will always be the third child node of
a NODE with LEVEL_ different than 1, so 'NODE[*[1] != '1']/*[3]'

will give you the PARENTROWID_ whatever its particular name (or that of the
LEVEL_ node) is.


Hope this helps!

Cheers,

Andreas

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.