使用此XQuery表达式
for $ex in distinct-values(//products/product/@group)
return $ex
和这个XML
<xml>
<products>
<product id="10" group="2"></product>
<product id="20" group="1"></product>
<product id="25" group=""></product>
<product id="30" group="2"></product>
<product id="35" group=""></product>
</products>
</xml>
我只得到:
但我也需要:
期待(订单不感兴趣):
一组中只有一种产品(第一种,如果超过1只有同一组),而且每种产品都没有组。
每个带有空组的产品也应该在此xquery中返回,但是如何?
答案 0 :(得分:2)
空字符串也是一个不同的值,应该已经返回,但很可能你根本就没有观察到它。将您的查询更改为
for $ex in distinct-values(//products/product/@group)
return <value>{ $ex }</value>
你会得到像
这样的结果<value>2</value>
<value>1</value>
<value/>
(<value/>
相当于<value></value>
,“包含”空字符串。)
如果您希望将单个产品与空组和所有没有组的产品匹配,您可以将查询拆分为两部分:对具有组的产品进行过滤,然后添加不具有组的产品。
(
(: return first product for each product group :)
for $group in distinct-values(//products/product/@group)
(: unless group is empty :)
where $group
return (//product[@group eq $group])[1],
(: add products without any group :)
//product[@group eq '']
)
答案 1 :(得分:1)
Xpath 1.0能够在没有任何程序代码的情况下找到这些元素
//product[
not(@group = preceding-sibling::product/@group)
or (@group="")
]