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

RE: Using "except" with node sequences

Subject: RE: Using "except" with node sequences
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 4 Aug 2008 19:06:46 +0100
RE:  Using "except" with node sequences
It works for me (I get <data id="3"> only).

Stylesheet:

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="/">
    <xsl:variable name="normalized_data" as="element()+">
        <data id="1">
           <info action="delete" />
           <info action="insert" />
           <stuff />
        </data>
        <data id="2">
           <info action="insert" />
           <stuff />
        </data>
        <data id="3">
          <stuff />
        </data>
    </xsl:variable>
    <olddata>
    <xsl:sequence select="$normalized_data[not(info/@action='delete')]
except
                             $normalized_data[info/@action='insert' or
info/@action='modify']" />
    </olddata>
  </xsl:template>

</xsl:stylesheet>

Result with Saxon 9.1 (any source document):

<olddata><data id="3"><stuff/></data></olddata>

Though I wouldn't have written the code this way; I would write

$normalized_data[condition1 and not(condition2)]

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


> -----Original Message-----
> From: James Sulak [mailto:jsulak@xxxxxxxxxxxxxxxx]
> Sent: 04 August 2008 18:39
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject:  Using "except" with node sequences
>
> Hello all,
>
> I have a sequence of nodes stored in a variable, and I am
> attempting to filter it using an XPath expression that
> includes the "except" operator.  However, it's not working
> like I expect it to.
>
> For a node sequence called $normalized_data:
>
> <data id="1">
>    <info action="delete" />
>    <info action="insert" />
>    <stuff />
> </data>
> <data id="2">
>    <info action="insert" />
>    <stuff />
> </data>
> <data id="3">
>    <stuff />
> </data>
>
> I am attempting to filter it using this logic:
>
> <olddata>
>    <xsl:sequence
> select="$normalized_data[not(info/@action='delete')] except
> $normalized_data[info/@action='insert' or
> info/@action='modify']" /> </olddata>
>
> I expect the returned sequence to include all of the nodes in
> $normalized_data that match the first condition and don't
> match the second condition (node 3).  What I am actually
> getting is all of the nodes in $normalized data.  Is there
> something about the "except" operator that I'm not understanding?
>
> Thanks,
>
> -James

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-2007 All Rights Reserved.