gpt4 book ai didi

按属性查找非子元素的 Xpath 表达式

转载 作者:行者123 更新时间:2023-12-03 16:12:06 25 4
gpt4 key购买 nike

这是一个很好的谜题。假设我们有这么一段代码:

<page n="1">
<line n="3">...</line>
</page>

使用简单的 xpath 表达式在页面元素 "n=1"中定位行元素 "n=3"真的很容易:xpath(//page[@n='1')/line[@n='3] '])。伟大,美丽,优雅。
现在假设我们拥有的是这种编码(熟悉 TEI 的人会知道这是从哪里来的)。
<pb n="1"/>
(arbitrary amounts of stuff)
<lb n="3"/>

我们想要找到 n="3"的 lb 元素,它跟在 n="1"的 pb 元素之后。但请注意——这个 lb 元素几乎可以在 pb 之后的任何地方:它可能不是(并且很可能不是) sibling ,但可能是 pb sibling 的 child ,或者 pb 的 parent 等等.

所以我的问题是:您将如何使用 XPath 搜索这个带有 n="3"的 lb 元素,它跟在带有 n="1"的 pb 元素之后?

提前致谢

彼得

最佳答案

使用 :

  //pb[@n='1']/following::lb[@n='2']
|
//pb[@n='1']/descendant::lb[@n='2']

这将选择任何 lb跟随指定 pb 的元素按文档顺序 - 即使需要 lb元素是 pb 的后代元素。

请注意 那个 以下表达式通常不会选择所有想要的 lb元素 (它无法选择任何这些是 pb 元素的后代):
  //pb[@n='1']/following::lb[@n='2']

说明 :

中所定义W3C XPath specification , following::descendant::轴不重叠:

"the following axis contains all nodes in the same document as the context node that are after the context node in document order, excluding any descendants and excluding attribute nodes and namespace nodes"

关于按属性查找非子元素的 Xpath 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11370730/

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