ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> xsl-list
xsl-list
RE: [xsl] Copy all elemnts but one, not working
by Michael Haarman other posts by this author
Dec 28 2005 9:44AM messages near this date
RE: [xsl] Copy all elemnts but one, not working | RE: [xsl] Copy all elemnts but one, not working
& XSLT >  From: Huerta, Micah

>  Great!  I'm glad to know that it is indeed possible.  Can you 
>  please elaborate on the invocation part?  Are you saying that 
>  instead of excluding an element, expressly include only 
>  wanted elements?  What would a sample select expression 


Micah,

xsl:copy-of performs a *deep* copy, including all descendant elements and
attributes.  I believe that is the source of your confusion.  Your original
template simply matched all first order children of chapter and copied them
(the title and para elements) and their children and attributes.

Your problem (element exclusion) is a FAQ and the answer involves what is
termed the identity transform:

http://www.dpawson.co.uk/xsl/sect2/identity.html#d5442e43

Other links on that page will help clarify what is going on.  I'm not
entirely clear what your output needs to be, but it seemed you wanted to
build a tree rooted on chapter and containing everything but the *imagedata*
element.  To invoke the templates I provided to accomplish this, use an
apply-templates like this:

  <xsl:template match="/"> 
    <xsl:apply-templates select="/SIGNATURES/SIGNATURE/chapter"/> 
  </xsl:template> 

To collect everthing but the *imagedata* from your input, invoke the
identity transform like this:

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


The second template provided in my original response simply matches
*imagedata* elements and ignores them.  Because its match is explicit, it
supercedes the invocation of the identity transform which would otherwise
match *imagedata* with the wildcard.

HTH,

Mike


>  
>  Try a pair of templates like this:
>  
>    <xsl:template match="*">
>      <xsl:copy>
>        <xsl:copy-of select="@*"/>
>        <xsl:apply-templates/>
>      </xsl:copy> 
>    </xsl:template>
>  
>    <xsl:template match="imagedata"/>
>  

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe@[...].com> 
--~--
Thread:
Micah Huerta
Michael Haarman
Michael Haarman
Micah Huerta
Michael Haarman
Micah Huerta

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved