我正在尝试编写一个Xquery来搜索数据库中的xml,该数据库具有任何具有R =" 3"它应该有任何相应的XYZ节点,其中有attr =" 106"
<Abc ID="X" Src="D" R="1">
<XYZ ID="4101847" attr="106">
</XYZ>
<XYZ ID="Y" attr="105">
</XYZ>
</Abc>
<Abc ID="Z" Src="G" R="73">
</Abc>
<Abc ID="P" Src="B" R="3">
<XYZ ID="Q" attr="106">
</XYZ>
<XYZ ID="R" attr="101">
</XYZ>
<XYZ ID="" attr="100">
</XYZ>
</Abc>
我在下面尝试了查询
cts:element-query(
fn:QName("namespace","Parent"), cts:and-query(
(
cts:element-attribute-value-
query(fn:QName("namespace","Abc"),xs:QName("R"),"3"),
cts:element-attribute-value-
query(fn:QName("namespace","XYZ"),xs:QName("attr"),"106")
)
)
)
即使任何其他Abc的XYZ节点匹配attr为106
,它也会给出结果答案 0 :(得分:1)
您应该使用cts:element-query()
在元素上使用范围启动查询答案 1 :(得分:0)
您希望将两个属性值查询约束到相同的Abc
父元素。您需要在cts:element-query
上执行Abc
才能实现这一目标。对Abc
的父级进行元素查询会太高。下面的一些代码可以更清楚地说明事情。请注意,为了便于理解,我将您的Abc示例保存为单独的文件:
xquery version "1.0-ml";
xdmp:document-insert("/abc1.xml",
<Abc ID="X" Src="D" R="1">
<XYZ ID="4101847" attr="106">
</XYZ>
<XYZ ID="Y" attr="105">
</XYZ>
</Abc>
),
xdmp:document-insert("/abc2.xml",
<Abc ID="Z" Src="G" R="73">
</Abc>
),
xdmp:document-insert("/abc3.xml",
<Abc ID="P" Src="B" R="3">
<XYZ ID="Q" attr="106">
</XYZ>
<XYZ ID="R" attr="101">
</XYZ>
<XYZ ID="" attr="100">
</XYZ>
</Abc>
)
;
cts:search(collection(), cts:element-query(
xs:QName("Abc"),
cts:and-query((
cts:element-attribute-value-query(
xs:QName("Abc"),
xs:QName("R"),
"3"
),
cts:element-attribute-value-query(
xs:QName("XYZ"),
xs:QName("attr"),
"106"
)
))
))
HTH!