gpt4 book ai didi

xml - 数据库 XPath 查询

转载 作者:搜寻专家 更新时间:2023-10-30 22:33:38 25 4
gpt4 key购买 nike

有人给了我这个 XML,并要求我指出表达式返回了多少个元素:

<a>
<a>
<a>1</a>
<a>2</a>
</a>
<a>
<a>3</a>
<a>4</a>
</a>
</a>

XPath 查询是:

i) //a[a/text()=3]/a

ii) //a[a/a/text()=3]/a/a

iii) //a[a/text()=2][a/text()=3]

给出的答案是 i) 2, ii) 4, iii) 0

但是,我在尝试理解它时遇到了一些问题。对于我),

我的理解是首先检查谓词。//a 表示后代或自身,这意味着我正在检查//a/a/3。由于我在所述路径中得到了 3,

<a>
<a>
<a>3</a>
<a>4</a>
</a>
</a>

所以谓词为真。然后,我执行 XPath 查询,它是//a/a,它将返回 2 作为这个 block :

<a>
<a>3</a>
<a>4</a>
</a>

里面有2个。然后对于 ii),首先我检查谓词//a/a/a/3,与上面相同,我得到了那条路径。由于谓词返回 true,因此我将执行 XPath 查询,例如//a/a/a。但它不应该作为 1 返回,因为我正在看这个:

<a>
<a>
<a>1</a>
</a>
</a>

我真的很困惑如何追踪它,我很确定我的概念是错误的,因为答案是错误的。是否有任何简单的方法或更好的示例?

提前致谢!

最佳答案

我将尝试以第一个 XPath 为例进行解释。阅读此答案后测试您的理解,将您刚刚理解的内容应用到 XPath 的其余部分。

  • //a : 找到所有 a元素,文档中的任何位置。到目前为止,将返回 7 个元素。
  • [a/text()=3] : 过滤 a以前的 XPath 找到的元素到具有 子元素 a 的元素其中一个子文本节点等于 3 。到目前为止,只会返回一个元素; <a>3</a>父级 .
  • /a : 返回子元素 a来自 <a>3</a>以前的 XPath 找到的元素。这意味着整个 XPath 将返回 2 个元素,因为有两个 a<a>3</a>父元素的子元素

Demo 1

输出:

<a>3</a>
<a>4</a>

更新:

刚刚意识到您对第二个 XPath 而不是第一个感到困惑。但是您对第一个的理解也有点偏差,所以我希望最初的答案仍然有用。下面是关于第二个 XPath 的简要说明:

  • //a : 找到所有 a元素,文档中的任何位置。到目前为止,将返回 7 个元素。
  • [a/a/text()=3] : 谓词中的表达式将匹配 <a>3</a> 的父级.所以到目前为止,整个 XPath 只会匹配一个元素; 根元素
  • /a/a : 从之前的 XPath 找到的根元素,返回所有的孙元素 a元素。所以整个 XPath 返回 4 个元素

Demo 2

关于xml - 数据库 XPath 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40561785/

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