xml - 两组方括号(如二维数组)在 XPath 中意味着什么?

标签 xml xpath syntax position

在 XPath 中,当您编写包含包含在 [] 中的两个连续值(如 Java 数组 [][])的查询时,这意味着什么?

例如:

//bookstore/book[3][1]

当我这样做时,我得到了第 3 本书作为结果(如果我只是说 //bookstore/book[3]

我一直在尝试使用它并确定到底发生了什么,例如,我尝试了 //bookstore/book[3][2]//bookstore/book[3][0] 但没有得到任何结果。它似乎只有在第二个值为 1 时才有效,但我不知道为什么。

这是我正在使用的 XML:

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book category="COOKING">
  <title lang="en">Everyday Italian</title>
  <author>Giada De Laurentiis</author>
  <year>2005</year>
  <price>30.00</price>
</book>

<book category="CHILDREN">
  <title lang="en">Harry Potter</title>
  <author>J. K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

<book category="WEB">
  <title lang="en">XQuery Kick Start</title>
  <author>James McGovern</author>
  <author>Per Bothner</author>
  <author>Kurt Cagle</author>
  <author>James Linn</author>
  <author>Vaidyanathan Nagarajan</author>
  <year>2003</year>
  <price>49.99</price>
</book>

<book category="WEB">
  <title lang="en">Learning XML</title>
  <author>Erik T. Ray</author>
  <year>2003</year>
  <price>39.95</price>
</book>

<book category="OPENSOURCE">
  <title lang="en">Open Source</title>
  <year>2003</year>
  <price>39.95</price>
</book>

</bookstore>

最佳答案

谓词在上下文中运行。当您使用 //bookstore/book[3](相当于 //bookstore/book[position()=3])时,您正在限制节点集到第三个位置的匹配节点。在 that 上下文中,如果您添加一个额外的谓词,如 [1],您只是选择了一个且唯一可用的节点。

如果您的第一个谓词产生一个节点集,您希望用另一个谓词添加更多限制,这将很有用。例如,如果您的第一个谓词通过选择年份限制了节点

//bookstore/book[year=2005]

您将有两个节点,您可以使用第二个谓词选择这 2 个中的第一个,选择位置:

//bookstore/book[year=2005][1]

您可以在只有一个节点后添加任意数量的 [1],因为它的结果将始终是一个包含一个节点的节点集,而您选择的是第一个位置的节点:

//bookstore/book[3][1][1][1][1][1][1]

关于xml - 两组方括号(如二维数组)在 XPath 中意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21732850/

相关文章:

java - 将文件转换为 xml,然后将其添加到 zip

xml - 这真的不是有效的 xs :decimal?

java - JAXB XML 适配器通过注释而不是通过 setAdapter 工作

xml - 命名空间停止 XSLT 工作

python - 如何使用 Selenium Python 单击 https ://www. tempinbox.xyz/mailbox/username@domain.name 中的验证消息和按钮

c - extern 关键字对 C 函数的影响

haskell - 无法将预期类型 [a0] 与实际类型 IO () 匹配

java - 无法从 fragment 类在 Textview 上设置文本

xml - 如何使用 XSLT/XPath 生成以逗号分隔的列表?

javascript - 如何使用 jQuery 检查某个元素是否至少具有指定类列表中的一个类?