xsl-list
[Top] [All Lists]

RE: in-document references

2003-01-06 16:51:58
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



<Prev in Thread] Current Thread [Next in Thread>