RE: [xsl] in-document references

Subject: RE: [xsl] 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: [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[@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


Current Thread