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