[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Applying templates only to certain part of the tree

Subject: Re: Applying templates only to certain part of the tree
From: David Carlisle <davidc@xxxxxxxxx>
Date: Wed, 17 May 2000 13:49:43 +0100 (BST)
testsec
   X-Originating-IP: [212.252.1.73]
   From: "Nuri Besen" <nb_news@xxxxxxxxxxx>
   Date: Wed, 17 May 2000 08:28:56 EDT
   Sender: owner-xsl-list@xxxxxxxxxxxxxxxx
   Precedence: bulk
   Reply-To: xsl-list@xxxxxxxxxxxxxxxx
   Content-Type: text/plain; format=flowed
   Content-Length: 831

   Hello,

   I am trying the following, and it does not compile but:

   <xsl:template match="/">
	   <xsl:apply-templates select="main and not(main//TestSec)"/>
	   <xsl:apply-templates select="main//TestSec"/>
   </xsl:template>

   where I want to apply the templates for everything under the "main" section 
   but excluding the TestSec.

<xsl:apply-templates takes a select expression that must return a node
set. "main and not(main//TestSec)" is a boolean valued expression that
just returns true or false.





   The following works but applies the TestSec templates twice, naturally.

   <xsl:template match="/">
	   <xsl:apply-templates select="main"/>
	   <xsl:apply-templates select="main//TestSec"/>
   </xsl:template>

   What is the correct method to exclude a part of the tree?


It depends what you want to do

select="main//*[not(self::TestSec)"
and
select="main//TestSec"

do what you are apparently trying to do, which is select all nodes
below main, firstly those that are not called TestSec and then those
that are.

However I suspect that isn't what you want to do. It flattens the
document tree, and if any template for any node that is selected by
select="main//*[not(self::TestSec)"
calls xsl:apply-templates in the usual way, selecting its children,
then TestSec will end up being processed twice anyway.

If you want to process the tree missing out TestSec, then process them
later you probably want

<xsl:apply-templates select="main"/>
<xsl:for-each select="main//TestSec">
 ...
</xsl:for-each>


...

<xsl:template match="TestSec"/>

David


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


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.