[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
[Recent Entries]
[Reply To This Message]
Re: Applying templates to all but descendant-or-self::
Subject: Re: Applying templates to all but descendant-or-self::
From: "Spencer Tickner" <spencertickner@xxxxxxxxx>
Date: Fri, 16 Jun 2006 07:23:05 -0800
|
Hi Jagdishwar,
Thanks for the post.
in your case, the
<xsl:apply-templates select="*[not(descendant-or-self::sectionnumber
or descendant-or-self::sectiontext)]"/>
will not match <change> element because,
when <change> is the context node, it satisfies the predicate
(descendant-or-self::sectionnumber or descendant-or-self::sectiontext)
as <change> itself has sectionnumber and sectiontext as descendents.
After looking and thinking about this statement closely I can kind-of
see where you're coming from. Of course you're right, I've done a
couple of tests just to prove it to myself. But it still doesn't sit
well with me. If I <xsl:apply-templates
match="descendant-or-self::sectionnumber"/> I would not expect (nor
should I) to match any <change> elements. Even though as your
statement above indicates the <change> element satisfies the predicate
when it's the context node. Why then when using the same statement
using not() would I not get <change> elements?
i think you can achieve what you are looking for, by using
<xsl:apply-templates select="*[not(self::sectionnumber or self::sectiontext)]"/>
it will match all the children of <section> exept sectionnumber and sectiontext.
This is true, however it still matches the "descendants" sectionnumber
and sectiontext when the <change> element is in context of the
<section> element, so instead of dropped elements I end up with
duplications.
(It does work with your original xsl post but I had to change
<xsl:template match="change">
<xsl:apply-templates select="*[not(self::sectionnumber or self::sectiontext)]"/>
</xsl:template>
to <xsl:template match="change"><xsl:apply-templates</xsl:template>
because as I mentioned before the <change> elements can enclose any
elements within my xml document, not just children of <section>)
Thanks again for the post, if you have any other ideas or thoughts I
would love to hear them. In the end I may have to just resort to an
ugly choose statement.
Thanks,
Spencer
On 6/15/06, Jagdishwar B <jagdishwar.beemanati@xxxxxxxxx> wrote:
Hi,
>
> I'm still rather confused by the reason that <xsl:apply-templates
> select="*[not(descendant-or-self::sectionnumber or
> descendant-or-self::sectiontext)]"/> would not match the <change>
> element. I wonder if you could shed any light on this?
in your case, the
<xsl:apply-templates select="*[not(descendant-or-self::sectionnumber
or descendant-or-self::sectiontext)]"/>
will not match <change> element because,
when <change> is the context node, it satisfies the predicate
(descendant-or-self::sectionnumber or descendant-or-self::sectiontext)
as <change> itself has sectionnumber and sectiontext as descendents.
and, not(descendant-or-self::sectionnumber or
descendant-or-self::sectiontext) is giving false when <change> is the
context node, so it is not getting matched.
i think you can achieve what you are looking for, by using
<xsl:apply-templates select="*[not(self::sectionnumber or self::sectiontext)]"/>
it will match all the children of <section> exept sectionnumber and sectiontext.
Kind Regards,
Jagdishwar.
|
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
RSS 2.0 |
|
Atom 0.3 |
|
|