xml - 轴导航期间的xpath上下文节点

标签 xml xpath

看DTD:

<!ELEMENT root (a|b)+>
<!ELEMENT a (a|b)*>
<!ELEMENT b (a|b)*>


还有以下简单的XML :(为方便起见,我标记了元素)

<root>
  <b1>
    <b2></b2>
    <a1></a1>
  </b1>
  <b3></b3>
</root>


当我执行以下查询时:

a) /descendant-or-self::node()/b[1]
b) /descendant-or-self::b[1]


在a)和b)中,在应用[1]之前,我将XML树中的所有b都获取了。
但是当我要求第一个b时,在a)中我得到{b1,b2},在b)中我只有{b1}。
我的问题是,在这种情况下,上下文节点的逻辑是什么?换句话说,为什么“ / descendant-or-self :: node()/ b”(我知道等同于“ //”)和“ / descendant-or-self / b”之间有什么区别?

最佳答案

/descendant-or-self::node()/b[1]选择作为其父元素的第一个(b[1]子元素的所有b元素,因为/descendant-or-self::node()/b[1]/descendant-or-self::node()/child::b[1]的缩写。 /descendant-or-self::b选择文档中的所有b元素,并使用/descendant-or-self::b[1]选择它们中的第一个。

关于xml - 轴导航期间的xpath上下文节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38479515/

相关文章:

android - android XML 中的复选框和调整可绘制对象 (*.png) 的大小

python - 找不到元素 'xml' 的声明

xml - XSD 如何引用不同命名空间中同名的 XML 元素

java - 由于名称中存在撇号而导致无效的 XPath 表达式异常

xpath - 从后代的文本中获取元素

android - 创建矢量 Assets 时出现错误 "currentColor"

php - 为什么 count(DOMNode->childNodes) 返回不正确的子节点数? (PHP 和 XML)

java - 从节点选择中选择节点

php - xpath查找非空链接

python - 如何获取倒数第二个元素?