Subject: RE: in-document references
From: "Martinez, Brian" <brian.martinez@xxxxxxxx>
Date: Mon, 6 Jan 2003 16:51:58 -0700
|
> From: S Woodside [mailto:sbwoodside@xxxxxxxxx]
> Sent: Monday, January 06, 2003 4:07 PM
> Subject: in-document references
>
> I'm trying to transform a relax NG (RNG) grammar that has in-document
> references (e.g. ref and define). I could just "flatten" the RNG but
> I'd rather use the existing document. When I hit a ref in the
> RNG XML I
> do this:
>
> <xsl:template match="ref">
> <li>Ref:
> <b><xsl:value-of select="@name"/></b>
> <ul>
> <xsl:apply-templates
> select="//define[@name=current()/@name]"
> mode="def"/>
> </ul>
> </li>
> </xsl:template>
>
> which kind of works, except for a big problem. The template
> rules that
> are called by this are out of context. In other words, I want
> to treat
> them as though they are children of the element "ref" but
> instead they
> are treated as top-level elements in the XML file (which is true, of
> course).
>
> How do I apply the templates and specify that the context
> should be the
> current node?
Your current select expression tells the processor to select all 'define'
nodes that are descendants of the document element. To select just
descendants of the context node, do:
<xsl:apply-templates select=".//define[@name=current()/@name]" mode="def"/>
(This doesn't address optimization of course--this search pattern can be
quite expensive.)
hth,
b.
| brian martinez brian.martinez@xxxxxxxx |
| senior gui programmer 303.708.7248 |
| trip network, inc. fax 303.790.9350 |
| 6436 s. racine cir. englewood, co 80111 |
| http://www.cheaptickets.com/ http://www.trip.com/ |
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|