functx:distinct-nodes
The distinct XML nodes in a sequence (by node identity)
Description
The functx:distinct-nodes function returns the distinct nodes (based on node identity) in a sequence. It does this without resorting them in document order (it takes the first occurrence of each distinct node).It is different from the built-in fn:distinct-values function in that it returns nodes rather than atomic values, and it does not take into account the values (content) of the nodes, just their identity.
Note: if you want them to be resorted in document order, or you don’t care, you can simply use the expression “$nodes/.” (without the quotes), which works because the slash operator removes duplicates and resorts. The “.” in the expression returns the node itself.
Parameters |
Description |
---|---|
nodes:node() |
the node sequence |
Examples
XPath |
Results |
Explanation |
---|---|---|
functx:distinct-nodes(($in-xml/child, $in-xml/*)) |
<child>1</child> <child>2</child> <child>3</child> <child>3</child> |
The two child elements that contain 3 have distinct identities, even if they contain the same content. |
functx:distinct-nodes(($in-xml/child[3], $in-xml/*)) |
<child>3</child> <child>1</child> <child>2</child> <child>3</child> |
The 3 appears first because it is first in the input sequence. |
XPath |
Results |
---|---|
functx:distinct-nodes(($in-xml/child, $in-xml/*)) |
<child>1</child> <child>2</child> <child>3</child> <child>3</child> |
functx:distinct-nodes(($in-xml/child[3], $in-xml/*)) |
<child>3</child> <child>1</child> <child>2</child> <child>3</child> |