[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
descendant or self
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.

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.