Re: [xsl] Anyone can explain me this syntax?

Subject: Re: [xsl] Anyone can explain me this syntax?
From: David Carlisle <davidc@xxxxxxxxx>
Date: Tue, 13 Jan 2004 15:38:55 GMT
this is explained in jeni's pages on grouping but basically

> Why the . (dot) is used? 

. is the current node as always in xpath

>  What's the meaning of the | (pipe)?

| is set union select="a|b" selects all nodes called a and all nodes
  called b and returns the union of those sets (which means, it can
  often be read as "or") select="a|b" selects all elements called a or
  b.

> - What's the meaning of [1]? 
if a predicate is numeric it is tests the value of position()

select="a[3]"
selects the third a child of the current node.

> I tried by using [2] and it worked too... or, perhaps I was lucky?
[2] wouldn't work in general, that would select the second item of each
group rather than the first, and in particular if a group only had one
item you would get nothing.

You want to test if the current node is the first item of the group
in XPath 2 draft that is

 . is key('relacion_x_cobertura', REL_ID)[1]

but Xpath 1 does not have the "is" operator or any other direct way to
test node identity so you can use either one of two methods

testing generated ids:

generate-id(.) = generate-id(key('relacion_x_cobertura', REL_ID)[1])

this does a string equality test of the generated ids, which will be
equal only if they are the same node

or you can do the test you had

count(. | key('relacion_x_cobertura', REL_ID)[1]) = 1

. | key('relacion_x_cobertura', REL_ID)

is the union of the two nodes . and key('relacion_x_cobertura',
REL_ID)[1], so eiether these nodes are different and so this set has two
elements or they are the same in which case the set will have one
element (so count(....) =1.
(Note this test relies on the fact that in this context you know that
there is some element with key('relacion_x_cobertura', REL_ID) as 
in general you need to check that the  key('relacion_x_cobertura',
REL_ID) is non-empty, as if that is the empty set the union with . would
again only have one element in it.

David


-- 
http://www.dcarlisle.demon.co.uk/matthew

________________________________________________________________________
This e-mail has been scanned for all viruses by Star Internet. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk
________________________________________________________________________

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread