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

Subject: RE: [xsl] How do I access the nodeset that the IDREF refers to?
From: "Robert Koberg" <rob@xxxxxxxxxx>
Date: Wed, 8 Jan 2003 15:02:39 -0800
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@xxxxxxxxxxxxxxxxxxxxxx
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of bix xslt
> Sent: Wednesday, January 08, 2003 2:26 PM
> To: XSL-List@xxxxxxxxxxxxxxxxxxxxxx
> 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[@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


Current Thread