我的XQuery是:
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
返回:name="city" name="city" name="city" name="city" name="city"
当我添加区分值时,如:
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)
返回:city city city city city
我只需要返回一个“城市”我该怎么办?
答案 0 :(得分:7)
您需要对整个结果应用distinct-values
函数(即,不要对每个结果项目应用):
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
)
查询也可以写为单个XPath表达式:
distinct-values(//xs:element/@name[contains(., 'city')])
答案 1 :(得分:3)
使用group by
。您的查询多次返回city
,因为在每次迭代(for循环)中,$attr
中只有一个这样的元素。所以你在单个元素上做distinct-values
,但是你多次这样做。
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
答案 2 :(得分:0)
这项工作
distinct-values(for $schema in xsd:schema
for $nodes in $schema//*,
$attr in $nodes/xsd:element/@name
where fn:contains($attr,'city')
return distinct-values($attr))