RE: [xsl] XSLT/XPATH 2.0 - except example.

Subject: RE: [xsl] XSLT/XPATH 2.0 - except example.
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 22 Jul 2009 22:01:00 +0100
<xsl:copy-of select="* except X"/>

means "make an exact copy of all the children, except any child selected by
the expression X (which should not be copied at all).

I suspect you are misunderstanding it to mean "copy all the children,
modifying them as you do so to leave out any nodes selected by X".

Clearly that doesn't work: the select expression selects all the children,
then unselects some of them, then xsl:copy-of copies all those that remain.

Regards,

Michael Kay
http://www.saxonica.com/
http://twitter.com/michaelhkay 

 

> -----Original Message-----
> From: Knight, Michel [mailto:michel.knight@xxxxxxxx] 
> Sent: 22 July 2009 21:45
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] XSLT/XPATH 2.0 - except example.
> 
> Using Saxon 9
> Windows
> XSLT/XPATH 2.0
> 
> Hi,
> 
> I'm trying to remove the h1 from my source with the "except" 
> and it doesn't work.
> ex:<xsl:copy-of  select="* except
> (//xhtml:div[@class='border']//xhtml:h1)" />
> 
> When I do the same logic to class=border section it work?? 
> <xsl:copy-of  select="* except(//xhtml:div[@class='border'])" />	
> 
> What I'm I missing, with the except for the removal of that 
> section h1???
> Note: source code included.
> Regards,
> 
> Michel
> 
> ---------------   My StyleSheet
> <xsl:strip-space elements="*"/>
> <xsl:template match="xhtml:html" exclude-result-prefixes="xhtml" >
> 
> <root>
> 			<content>
> 				<xsl:apply-templates
> select="//xhtml:div[@class='center']"  
> exclude-result-prefixes="xhtml"/>
> 
> 			</content>
> </root>
> </xsl:template>
> <!--
> ==============================================================
> =========
> -->
> <!--*****************************************-->
> <!-- Content section just remove the right nav-->
>   <xsl:template match ="//xhtml:div[@class='center']"
> exclude-result-prefixes="xhtml">
> 		<!-- Right Nav first-->
> 		Remove h1
>             <!-- THIS doesn't WORK, why????? --> 	       
> 			<xsl:copy-of  select="* except
> (//xhtml:div[@class='border']//xhtml:h1)" />				
> 	    END of remove h1
>             <!-- THIS WORK --> 	       
> 	       <xsl:copy-of  select="*
> except(//xhtml:div[@class='border'])" />	
>   </xsl:template>
> <!--*****************************************-->
> </xsl:stylesheet>
> 
> ---------------   My Source
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" ""> 
> <html xmlns="http://www.w3.org/1999/xhtml"; lang="en" 
> xml:lang="en"> <head> </head> <body> <!--googleoff:all--> 
> <div class="page"> <div class="center"> <div class="border"> 
> <h1> <a name="cont" id="cont">  Aviation Security </a>  </h1> 
> <p>The Government of Canada has committed more than programs 
> include the following:</p> </div> </div> </div> </body> </html>

Current Thread