xsl-list
[Top] [All Lists]

RE: [xsl] Using "except" with node sequences

2008-08-04 11:07:13
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(_at_)jonesmcclure(_dot_)com] 
Sent: 04 August 2008 18:39
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] 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

--~------------------------------------------------------------------
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(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
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(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>