xquery - 在具有特定属性的元素中搜索值
问题描述
<elemA>
<elemZ mytype ="1">
<myval>100</myval>
</elemZ>
<elemZ mytpe ="2">
<myval>200</myval>
</elemZ>
</elemA>
使用 cts:queries,我想在 mytype = "1" 的 elemZ 中找到 100 的myval。我没有看到任何允许cts:element-query
并过滤属性的 cts 查询。即使 ancts:and-query
似乎也没有帮助。
如果没有属性约束,元素值查询和两个元素查询将很容易工作。
cts:search(doc(), (some cts query?))
解决方案
首先尝试这个简单的 xpath - 验证它是否有效,并且它对您来说性能不够。
//elemZ[@mytype=1]/myval[. = "100" ]
这应该返回 mytype=1 和 myval text content = "100" 的 elemZ 的 myval 元素子项
为了做得更好(使用 cts:query)将需要那些“可怕的”其他 cts:queries 和可能的一些范围索引。大致:(未经测试)
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。
推荐阅读
- javascript - TypeError:source.split 不是函数。(在 'source.split('\n')' 中,'source.split' 未定义)
- php - 上传图片到Laravel时文件重复
- github - 删除 Github 提交
- c++ - libpq 中的查询流水线在哪里?
- java - 为什么通过双击启动 jar 文件没有从磁盘读取的权限 - 但如果从终端启动则没有?
- r - 如何在 image() R 中包含行和列名
- dataweave - 如何根据 mulesoft 数据编织中的列值放置顺序计数或索引?
- php - 使用 PHP 的 HTML 中的下拉列表
- javascript - 函数调用中的赋值
- php - 此路由不支持 GET 方法。支持的方法:HEAD。- 拉拉维尔 8