加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

xpath – /和/ root-node之间的区别

发布时间:2020-12-14 01:23:44 所属栏目:Linux 来源:网络整理
导读:我的文档如下所示: a whatever/a 如果我运行/或/ a返回整个文档(至少有效). 如果我运行/ a / ..则返回整个文档. 但是/ ..返回一个空序列 考虑/和/ a返回相同的节点怎么来/ a / ..和/ ..是不同的? 解决方法 文档节点 您作为文档提供的XML代码实际上包含在另
我的文档如下所示:

<a>
    whatever
</a>

如果我运行/或/ a返回整个文档(至少有效).
如果我运行/ a / ..则返回整个文档.
但是/ ..返回一个空序列
考虑/和/ a返回相同的节点怎么来/ a / ..和/ ..是不同的?

解决方法

文档节点

您作为文档提供的XML代码实际上包含在另一个节点“文档节点”中.该文档是另一种节点类型,其他是元素,属性,文本节点,注释和处理指令.使用XQuery / XPath 2.0表示法,它看起来像这样:

document{
  <a>
      whatever
  </a>
}

对查询的影响

> /选择文档节点
> / a选择根元素,它是文档节点的唯一子元素
> / ..返回空序列,因为文档节点没有父节点
> / a / ..再次选择根元素的父节点,该节点也是文档节点
> /../a没有结果,因为我们“走出树”(与/相比)

我们为什么需要文档节点

文档节点很重要,因为XML specification允许其他节点跟随根节点,即处理指令和注释(和空格).从XML语法:

document       ::=           prolog element Misc*
Misc           ::=           Comment | PI | S

如果没有文档节点,XPath将无法访问这些元素,因为它们不是“根元素子树”的元素.

所以,这也是一个有效的XML文档(*):

document {
  <a>
      whatever
  </a>
  <!-- Just do nothing -->
  <?php foo(); ?>
}

(*)这不再是有效的XPath 2.0,因为我们必须给出一个节点序列.在XPath 2.0所需的每个节点之后,我省略了逗号,因为这仅用于演示目的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读