gpt4 book ai didi

xml - XPath优化: stop looking deeper if node is not my type

转载 作者:行者123 更新时间:2023-12-02 14:47:41 25 4
gpt4 key购买 nike

假设我想高效地从 xml 文档中选择所有 field 节点。该文档可能如下所示:

<pageSet>
<field>
<foo></foo>
<bar></bar>
</field>
<subform>
<field>
<foo></foo>
<bar></bar>
</field>
<subform>
<field>
<foo></foo>
<bar></bar>
</field>
<field/>
</subform>
</subform>
</pageSet>

field 节点只能具有 pageSetsubform 类型的祖先。

有没有办法以这样的方式获取所有字段节点?

/(pageSet或未知深度的子表单节点)/field

我想告诉 xpath 处理器在发现 subformpageSet 之外的元素后停止深入查找。因为它们可能具有其他非常嵌套的结构,从而减慢 xpath 评估速度。

示例:

/pageSet/subform/one_or_more_unknown_nodes/field 不可能发生!当 xpath 处理器找到 one_or_more_unknown_nodes 时,它不应该再深入查找,因为不会有 field 节点。

最佳答案

首先,您无法告诉 XPath 处理器去哪里查找:它会做出自己的决定。您能做的最好的事情就是为它提供足够的信息,以便它知道需要查找的位置。

理论上,给定表达式

//field[not(ancestor::*[not(self::pageSet or self::subform)])]

XPath 处理器有足够的信息知道它不需要搜索名称不是 pageSet 或子表单的元素的后代。

但我怀疑您的 XPath 处理器是否足够智能来做到这一点。

无论如何,这可能都不是一个明智的策略。根据数据的存储方式和可用索引,评估查询的最快方法可能是查找所有 field 元素,然后检查它们的祖先。 (这意味着,如果如您所建议的那样,谓词始终为 true,那么您实际上通过提供谓词减慢了查询速度。)

最重要的是,如果不了解特定 XPath 处理器的内部结构,就无法明智地讨论 XPath 表达式的性能。

关于xml - XPath优化: stop looking deeper if node is not my type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37682582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com