<elemA>
<elemZ mytype ="1">
<myval>100</myval>
</elemZ>
<elemZ mytpe ="2">
<myval>200</myval>
</elemZ>
</elemA>
使用cts:queries,我想在 with mytype =“ 1”的elemZ中找到100的myval。我看不到任何允许cts:element-query
且也可以过滤属性的cts查询。甚至cts:and-query
似乎也没有帮助。
没有属性约束,元素值查询和两个元素查询将很容易工作。
cts:search(doc(), (some cts query?))
答案 0 :(得分:3)
首先尝试使用这个简单的xpath -验证它是否有效,并且它对您来说性能是否足够。
//elemZ[@mytype=1]/myval[. = "100" ]
那应该返回elemZ的myval元素子元素,其mytype = 1且myval文本内容=“ 100”
要想做得更好(使用cts:query),将需要那些“可怕的”其他cts:查询和可能的一些范围索引。 大致:(未经测试)
search(doc(),
cts:element-query(xs:QName("elemZ"),
cts:and-query((
cts:element-attribute-value-query(xs:QName("elemZ"), xs:QName("mytype"), "1"),
cts:element-value-query(xs:QName("myval"), "100") )) ) )
建议您从执行任何操作的最简单表达式开始,然后一个接一个地添加约束。
在您的情况下,可以想到查询优化器会将简单的xpath优化为适当的cts查询。值得尝试和评估性能。我个人喜欢从基本的xpath开始,然后根据需要仅按我的方式使用cts:query。