I'm trying to get unique set of data from the XML below
<output>
<category>DB</category>
<title>Database systems</title>
<name>Smith</name>
<name>John</name>
<name>Adam</name>
</output>
<output>
<category>DB</category>
<title>Database systems</title>
<name>John</name>
<name>Smith</name>
<name>Adam</name>
</output>
<output>
<category>DB</category>
<title>Database systems</title>
<name>Adam</name>
<name>Smith</name>
<name>John</name>
</output>
<output>
<category>Others</category>
<title>Pattern Recognition</title>
<name>Adam</name>
<name>Jeff</name>
</output>
<output>
<category>Others</category>
<title>Pattern Recognition</title>
<name>Jeff</name>
<name>Adam</name>
</output>
Since the 3 output blocks contain the same information, I only need to pick one. But, when I use distinct-values() function, I'm getting all three of them in their respective order.
I have assigned the above table as $final and below is what I'm getting
for $f in distinct-values($final)
return $f
output
DBDatabase systemsSmithJohnAdam
DBDatabase systemsJohnSmithAdam
DBDatabase systemsAdamSmithJohn
expected
<output>
<category>DB</category>
<title>Database systems</title>
<name>Smith</name>
<name>John</name>
<name>Adam</name>
</output>
<output>
<category>Others</category>
<title>Pattern Recognition</title>
<name>Adam</name>
<name>Jeff</name>
</output>
no need for ordering in I tried to sort the name tag but its not working out as it adds too much to the code. Is there any logic in Xquery to get one copy from the above XML ?
<output>
elements are structurally different, so a simpledeep-equal(...)
does not work. When exactly to you consider two elements to contain "the same information"? What if a<name>
was duplicated in one of them? Do you only want to disregard ordering? – Leo Wörteler<output>
tags are "equivalent" to you, why not just grab the first ([1]
) tag and its children? – Jack Fleeting