xsl-list
[Top] [All Lists]

RE: Anyone can explain me this syntax?

2004-01-13 08:32:37
Hi,

From Muenchian method of grouping, I always use something like this:

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

  key('relacion_x_cobertura', REL_ID)

will return a node-set whose "relacion_x_cobertura" key value is the same as 
the string value of REL_ID element,
 
  key('relacion_x_cobertura', REL_ID)[1]

of that node-set, select the first,

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

create an union of that node-set with the current node. Remember that a 
node-set will *not* contain dublicates, so if the current node is same node as 
the first one returned by the key, the resulting set will only contain the 
current node.

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

count the number of nodes in the union set,

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

and if the count is equal to one, return boolean true. In effect, check if the 
current node is the same node as the first one returned by the key.

- Why the . (dot) is used? why if I omit it, it doesn't work 
(it returns all elements)?

The current node. See <http://www.w3.org/TR/xpath#NT-AbbreviatedStep>.

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

You haven't read the XPath 1.0 spec, have you? See 
<http://www.w3.org/TR/xpath#NT-UnionExpr>.

- What's the meaning of [1]? I have always used things like 
[FIELD_NAME=some_value]. I understand that perfectly, but 
what about placing only that number in the brackets? I tried 
by using [2] and it worked too... or, perhaps I was lucky?

Read the XPath 1.0 spec, you'll feel better in the morning.

Cheers,

Jarno

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