My XQuery is:
declare namespace xsd="http://www.w3.org/2001/XMLSchema";
for $schema in xsd:schema
for $nodes in $schema//*,
$attr in $nodes/xsd:element/@name
where fn:contains($attr,'city')
return $attr
return: name="city" name="city" name="city" name="city" name="city"
When I add distinct-values like:
declare namespace xsd="http://www.w3.org/2001/XMLSchema";
for $schema in xsd:schema
for $nodes in $schema//*,
$attr in $nodes/xsd:element/@name
where fn:contains($attr,'city')
return distinct-values($attr)
return: city city city city city
I need only one "city", how can I do it ?
You need to apply the distinct-values
function on the whole result (i. e., not to each single result item):
declare namespace xsd="http://www.w3.org/2001/XMLSchema";
distinct-values(
for $schema in xsd:schema
for $nodes in $schema//*,
$attr in $nodes/xsd:element/@name
where fn:contains($attr,'city')
return $attr
)
The query can also be written as a single XPath expression:
distinct-values(//xs:element/@name[contains(., 'city')])
Use group by
. Your query returns multiple times city
, because in each iteration (of the for loop) there is only one such element in $attr
. So you are doing the distinct-values
on a single element, but you are doing this multiple times.
declare namespace xsd="http://www.w3.org/2001/XMLSchema";
for $schema in xsd:schema
for $nodes in $schema//*,
$attr in $nodes/xsd:element/@name
where fn:contains($attr,'city')
group by $attr
return $attr
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With