Unique merging of node-sets 2003-02-28 - By zongaro@(protected)
Hi Karsten,
A node-set is truly a set of nodes, so the union of two node-sets will contain only unique nodes. You could write either of the following, depending on how early you want to get the single node set.
<xsl:variable name="nodes1and2" select="key('element_index', $id1)| key('element_index', $id2)"/>
or
<xsl:variable name="nodes1and2" select="$node1|$node2"/>
If you happen to have another variable (say, idns) whose value is a node-set that contains nodes whose values when converted to strings are equal to $id1 and $id2, you could also write the following.
<xsl:variable name="nodes1and2" select="key('element_index', $idns)"/>
Thanks,
Henry ------------------------------------------------------------------ Henry Zongaro Xalan development IBM SWS Toronto Lab Tie Line 969-6044; Phone (905) 413-6044 mailto:zongaro@(protected)
"Karsten Theis" <karsten.theis@(protected)> 02/28/2003 04:24 AM Please respond to karsten.theis
To: "XALAN Mailing List (E-Mail)" <xalan-j-users@(protected)> cc: Subject: Unique merging of node-sets
Hi,
I'm looking for a way to merge to node-sets into one, but I don't want to have duplicate elements.
The following XPATH works, but it's slow and should be replaced by two xsl:key statements:
Working XPATH (It is possible, that $id1 = $id2):
<xsl:variable name="all_nodes" select = "//elem[@(protected)=$id1 or @(protected)=$id2]"/>
xsl:key statement:
<xsl:key name="element_index" match="*" use="@(protected)"/> <xsl:variable name="node1" select = "key('element_index', $id1)"/> <xsl:variable name="node2" select = "key('element_index', $id2)"/>
How can I merge "node1" and "node2" into a node-set? And what happens, if $id1 = $id2 ?
Ciao, Karsten
|
|