|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Nested/embedded/self-referential path expressions.
Jeni Tennison wrote:
>
> Hi Ed,
>
> > What I want to do is combine the if with the "match=..." clause of
> > the template. The problem is that I need to reference the "name()"
> > of the context/element with the "name()" in a different
> > context/element. The logical expression would be somethink like the
> > following:
> >
> > <xsl:template match="Row/*[/Table/Columns/*[{inner context name}={outer
> > context name}]]">
> >
> > Can/how do I reference a element/component of the outer context for
> > comparison in the inner context?
>
> You can't. One method you can use in this situation, though, is to
> define a key that can get you from a name to a column (child of the
> Columns element):
>
> <xsl:key name="columns" match="/Table/Columns/*" use="name()" />
>
> Then you can do:
>
> <xsl:template match="Row/*[key('columns', name())]">
> ...
> </xsl:template>
>
> In general it's a bad idea to use complicated conditions like this
> within patterns; you'd probably be better off having a general
> template for all elements within Row elements, but only applying
> templates to those that share a name with a column:
>
> <xsl:template match="Row">
> <xsl:apply-templates select="*[key('columns', name())]" />
> </xsl:template>
>
> <xsl:template match="Row/*">
> ...
> </xsl:template>
Seems as though the pattern in the "select" is darn near as complex as
the match: "*[key('columns', name())]" versus "Row/*[key('columns',
name())]". Did we actually gain much ground here? Are there underlying
reasons why complexity in the "select" is preferred over the "match"?
What I decided to do (although I may change given your feedback) is two
templates and modes: one template to filter the columns, other templates
to process the filtered nodes:
<xsl:templateatch="gnsl:Row/*">
<xsl:variable name="MyName" select="name()" />
<xsl:if test="$TableColumns[name()=$MyName]" >
<xsl:apply-templates select="." mode="ColumnContent" />
</xsl:if>
</xsl:template>
<xsl:template mode="ColumnContent" match="gnsl:Row/*>
....
</xsl:template>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








