xsl-list
[Top] [All Lists]

RE: How do I access the nodeset that the IDREF refers to?

2003-01-08 16:02:39
Hi,

You want to define a top level key on your subnode using the id attribute:

<xsl:key name="subnodes" match="subnode" use="@id"/> 

Then in a template you can simply:

<xsl:template match="link">
 <xsl:apply-template select="key('subnodes', @idr)"/>
</xsl:template>

best,
-Rob

-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com]On Behalf Of 
bix xslt
Sent: Wednesday, January 08, 2003 2:26 PM
To: XSL-List(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] How do I access the nodeset that the IDREF refers to?


Hi all,

I'm not sure if I simply didn't use the right words, or I couldn't find the 
right combination of words, but I have not quite found the answer to my 
question in the FAQ or the archives.

Given a DTD similar to this:

<!ELEMENT root (subnode)*>
<!ELEMENT subnode (link)*>
<!ELEMENT link EMPTY>

<!ATTLIST subnode
     id     ID     #REQUIRED>

<!ATTLIST link
     idr    IDREF  #REQUIRED>

What I would like to know is how I can access the nodeset of the subnode 
element listed within the link element.  An example xml file might be:

<root>
  <subnode id="a" />
  <subnode id="b">
    <link idr="c" />
    <link idr="d" />
  </subnode>
  <subnode id="c">
    <link idr="e">
  </subnode>
  <subnode id="d" />
  <subnode id="e" />
</root>


An application might be to sort the list of four subnodes (a,b,c,d) based on 
their links.  An algorithm might be:
1. for every not(subnode/link), display subnode id
2. for every (subnode/link)
   2a. choose
         when link reference node contains link
            repeat step 2 with link reference node
         otherwise
            if link reference has not been displayed
                display link reference id
   2b. display subnode id


My question is essentially: how would I create a variable that contains the 
nodeset of the link reference?  First I would need it to test the link to 
determine if the link itself had links.  Next I would want to pass that link 
back into step two so that I could query its links.

Would the following XSL be something close?

    <xsl:variable name="linkRef">
        <xsl:value-of select="id(subnode/link[(_at_)idr])" />
    </xsl:variable>


Thanks in advance!
Bix

_________________________________________________________________
The new MSN 8 is here: Try it free* for 2 months 
http://join.msn.com/?page=dept/dialup


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

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