From: S Woodside [mailto:sbwoodside(_at_)yahoo(_dot_)com]
Sent: Monday, January 06, 2003 4:07 PM
Subject: [xsl] 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[(_at_)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[(_at_)name=current()/@name]" mode="def"/>
(This doesn't address optimization of course--this search pattern can be
quite expensive.)
hth,
b.
| brian martinez
brian(_dot_)martinez(_at_)trip(_dot_)com |
| 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