Thank you guys... works like a charm now :-)
2009/2/11 G. Ken Holman <gkholman(_at_)cranesoftwrights(_dot_)com>:
At 2009-02-11 14:44 +0100, Felix Nensa wrote:
I have a weird problem where the "except" operator does not behave as
I would expect it.
You are incorrectly treating "except" with node values, instead of as node
identity.
Given the following input source XML:
<root>
<Response>
<Users>
<Count>2</Count>
<User>
<Username>henry</Username>
<Online>false</Online>
<UserId>302</UserId>
</User>
<User>
<Username>felix</Username>
<Online>false </Online>
<UserId>288</UserId>
</User>
</GetUserList>
</Response>
<Response>
<Friends>
<Count>1</Count>
<Friend>
<UserId>288</UserId>
</Friend>
</Friends>
</Response>
</root>
I am trying to get all those Users wich are not in the list of Friends
with the following expression:
<xsl:variable name="users" select="//Users/User/UserId" />
<xsl:variable name="friends" select="//Friends/Friend/UserId" />
<!-- debug output -->
<xsl:value-of select="$users except $friends" />
It outputs: 302 288
I would expect: 302
The expression:
$A except $B
... will give you those nodes in $A that are not also nodes in $B. Not the
values of the nodes, but the nodes themselves.
I am using the latest version of Saxon.
Always a wise choice!
You want to deal with node value by using the "=" operator ... I have an
example below. Checking a scalar against the set returns false when the
operator is false for all members of the set, or true when the operator is
true for any member of the set.
I hope this helps.
. . . . . . . Ken
T:\ftemp>type felix.xml
<root>
<Response>
<Users>
<Count>2</Count>
<User>
<Username>henry</Username>
<Online>false</Online>
<UserId>302</UserId>
</User>
<User>
<Username>felix</Username>
<Online>false </Online>
<UserId>288</UserId>
</User>
</Users>
</Response>
<Response>
<Friends>
<Count>1</Count>
<Friend>
<UserId>288</UserId>
</Friend>
</Friends>
</Response>
</root>
T:\ftemp>type felix.xsl
<?xml version="1.0" encoding="US-ASCII"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:variable name="users" select="//Users/User/UserId" />
<xsl:variable name="friends" select="//Friends/Friend/UserId" />
<!-- debug output -->
<xsl:value-of select="$users [. != $friends]" />
</xsl:template>
</xsl:stylesheet>
T:\ftemp>xslt2 felix.xml felix.xsl
302
T:\ftemp>
--
Upcoming hands-on XSLT, UBL & code list hands-on training classes:
Brussels, BE 2009-03; Prague, CZ 2009-03, http://www.xmlprague.cz
Training tools: Comprehensive interactive XSLT/XPath 1.0/2.0 video
Video lesson: http://www.youtube.com/watch?v=PrNjJCh7Ppg&fmt=18
Video overview: http://www.youtube.com/watch?v=VTiodiij6gE&fmt=18
G. Ken Holman mailto:gkholman(_at_)CraneSoftwrights(_dot_)com
Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/
Male Cancer Awareness Nov'07 http://www.CraneSoftwrights.com/s/bc
Legal business disclaimers: http://www.CraneSoftwrights.com/legal
--~------------------------------------------------------------------
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>
--~--
--
Felix Nensa
CTO
zeec GmbH
Neusser Str. 28
50670 Cologne
Germany
mail: felix(_dot_)nensa(_at_)zeec(_dot_)biz
phone: +49 221 37997 472
fax: +49 221 37997 450
mobile: +49 171 958 51 40
web: www.zeec.biz
--~------------------------------------------------------------------
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>
--~--