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

时间:2016-07-20 11:04:37

标签: 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}。
我的问题是,在这种情况下,关于上下文节点的逻辑是什么?换句话说,为什么&#34; / descendant-or-self :: node()/ b&#34;之间存在差异? (我知道相当于&#34; //&#34;)和&#34; / descendant-or-self / b&#34;?

1 个答案:

答案 0 :(得分:1)

/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]选择第一个元素。