[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Hi Michael!
At 05:45 PM 4/18/2002, you wrote:
Well ... except to point out what you already know, that you have a few specious '/' characters in this XPath ...
Yes, this should work, and the test should be just the same as when matching each element instead of selecting from the top. I.e. (correcting for the slashes and tweaking a bit for readability, but the same effect):
<xsl:apply-templates select=
translates as
which is what you say you want.
OTOH, this doesn't really help, does it? The whole tree will still be walked collecting myelem elements, to be filtered with the predicate. (I don't think there's a way to avoid walking the whole tree one way or another to get those myelems, since the whole idea is not to miss any.)
If feasible, a two-pass approach has its attractions. XPath is not really designed to make this having-a-value-by-inheritance thing very transparent (the exception of the obscure lang() function proving this rule).
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Re: [xsl] Selecting/matching based on inherited attributes
Subject: Re: [xsl] Selecting/matching based on inherited attributes From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx> Date: Thu, 18 Apr 2002 18:21:50 -0400 |
Hi Michael!
At 05:45 PM 4/18/2002, you wrote:
I know how to check the ancestor value from within the element's content:
eg: <xsl:if test="ancestor-or-self::*[@att1][1]/[@att1='d'] and ancestor-or-self::*[@att2][1]/[@att2='c']">
Well ... except to point out what you already know, that you have a few specious '/' characters in this XPath ...
But that would mean walking through the entire nodeset each time I wanted to create output.
Is there a way to check from outside the element?
eg (knowing this is illegal, but trying to show intent):
<xsl:apply-templates select="//myelem/[ancestor-or-self::*[@att1][1]/[@att1 ='d']][ancestor-or-self::*[@att2][1]/[@att2='c']]"/>
in plain english: apply templates to all "myelem" nodes that have a closest-att1 of "d" and a closest-att2 of "c".
Yes, this should work, and the test should be just the same as when matching each element instead of selecting from the top. I.e. (correcting for the slashes and tweaking a bit for readability, but the same effect):
<xsl:apply-templates select=
"//myelem[ancestor-or-self::*[@att1][1][@att1='d'] and ancestor-or-self::*[@att2][1][@att2='c']]"/>
translates as
"all myelem elements for which a first ancestor-or-self with an @att1 has @att1='d' and a first ancestor-or-self with an @att2 has @att2='c'"
which is what you say you want.
OTOH, this doesn't really help, does it? The whole tree will still be walked collecting myelem elements, to be filtered with the predicate. (I don't think there's a way to avoid walking the whole tree one way or another to get those myelems, since the whole idea is not to miss any.)
If feasible, a two-pass approach has its attractions. XPath is not really designed to make this having-a-value-by-inheritance thing very transparent (the exception of the obscure lang() function proving this rule).
Cheers, Wendell
====================================================================== Wendell Piez mailto:wapiez@xxxxxxxxxxxxxxxx Mulberry Technologies, Inc. http://www.mulberrytech.com 17 West Jefferson Street Direct Phone: 301/315-9635 Suite 207 Phone: 301/315-9631 Rockville, MD 20850 Fax: 301/315-8285 ---------------------------------------------------------------------- Mulberry Technologies: A Consultancy Specializing in SGML and XML ======================================================================
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Selecting/matching based on i, mpriestl | Thread | Re: [xsl] Selecting/matching based , Jeni Tennison |
Re: [xsl] Invalid Character, Wendell Piez | Date | Re: [xsl] Schema Exploration..., Mark Diggory |
Month |