我对 XQuery 很陌生,所以如果我遗漏了什么,请原谅。
我正在尝试提取元素的某些子节点不同的数据,以及某个同级节点等于某个预定义字符串的数据
for $product in fn:distinct-values(document('cpwdoc')/root/package/properties/value[@key="product"])
where document('cpwdoc')/root/package/categories/category[@name="Cheap"]
return $product
我查询的 XML 如下所示:
<root>
<package>
<title>Some package 1</title>
<categories><category group="Other" name="Cheap"/></categories>
<properties>
<value key="product">BLUE-TOOTHBRUSH</value>
</properties>
</package>
<package>
<title>Some package 2</title>
<categories><category group="Other" name="Expensive"/></categories>
<properties>
<value key="product">BLUE-TOOTHBRUSH</value>
</properties>
</package>
<package>
<title>Some package 3</title>
<categories><category group="Other" name="Expensive"/></categories>
<properties>
<value key="product">TOOTHPASTE</value>
</properties>
</package>
</root>
所以基本上我只想要产品的不同出现,并且仅在类别的名称属性等于“便宜”的情况下。
我的查询返回 DISTINCT 产品,但 where 子句似乎没有效果,它仍然返回类别为“昂贵”的产品。
谁能告诉我我做错了什么。
你的 where 子句:
where document('cpwdoc')/root/package/categories/category[@name="Cheap"]
扩展为:
where boolean(document('cpwdoc')...)
这相当于
where exists(document('cpwdoc')...)
因此,只要有至少一种便宜的产品,您就可以退回所有产品。
你想要类似下面的东西
distinct-values(
for $package in document('cpwdoc')/root/package
let $value := $package/properties/value
where $value/@key = "product" and $package/categories/category/@name="Cheap"
return $value
)
如果您喜欢路径表达式,则与以下相同
distinct-values(document('cpwdoc')/root/package[categories/category/@name="Cheap"]/properties/value[@key="product"])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)