xml - 计算包含特定子字符串的唯一子节点
问题描述
我对 Excel 的FILTERXML
函数进行了一个小查询,并希望返回所有父<t>
节点,这些父节点拥有超过 2 个包含其父节点的文本属性的唯一子节点。可视化这一点:
<x>
<t>A
<s>A|x</s>
<s>A|y</s>
<s>B|y</s>
<s>B|z</s>
</t>
<t>B
<s>B|x</s>
<s>B|y</s>
<s>B|Z</s>
<s>A|x</s>
</t>
<t>C
<s>C|x</s>
<s>C|y</s>
<s>C|x</s>
<s>A|x</s>
</t>
</x>
所以我想在这里返回的是 t-node B
,因为它是唯一一个拥有超过 2 个持有其父母 text 属性的独特子代的节点B
。
因此,我想出了以下表达式:
//t[count(.//*[contains(.,concat(../text(),'|'))])>2]
这可以很好地返回B
,但也可以返回C
,因为它还没有考虑唯一值。因此我试图扩展这个表达式:
//t[count(.//*[contains(.,concat(../text(),'|'))][.//*[not(preceding::*=.)]])>2]
但是,现在它没有返回 t 节点。我的扩展表达式哪里出错了,我该如何解决这个问题,只B
在这种情况下返回?
解决方案
好吧,xpath 1.0 的奇妙之处......它是可行的,但看起来很丑:
//t[count(s[not(.= preceding-sibling::s/.)][contains(.,concat(../normalize-space(text()[1]),"|"))])>2]
推荐阅读
- wordpress - 使用多语言站点的联系表单时未找到错误 404
- javascript - 在画布或 div 中嵌套 Three.JS 渲染器
- javascript - 在 HTML 中通过 JS 导入 JSON
- java - 游戏启动后勾选方法崩溃
- json - 使用单个 JSONSchema 验证多个 JSON
- c# - WPF 数据绑定 - 未设置 PropertyChange 处理程序
- terraform - 当它依赖于 AWS SSM 参数数据源时,“无法计算计数值”
- azure - Ansible 在使用凭据文件和 azure_rm_resource 模块时访问 Azure 凭据
- python-3.x - 如何在 python3 urllib.request 中禁用自动重定向?
- java - 得到一个“InvalidUseOfMatchersException”,即使它被正确使用