【问题标题】:Simple XPath question about root node关于根节点的简单 XPath 问题
【发布时间】:2011-04-06 19:10:12
【问题描述】:

我刚刚开始学习 XPath,我正在学习没有缩写的语言。

当位置路径以字符“/”开头时,初始上下文节点被强制为根节点...

书中的示例 xml:

<widget type="gadget">
    ...
</widget>

如果我应该写 XPath,所以我得到了 type 属性,为什么我必须写:

/child::widget/attribute::type

而不是这样 /attribute::type

我对根节点有误解吗?因为我认为'/'和小部件是一样的......

谢谢

【问题讨论】:

  • 好问题,+1。请参阅我的答案以获得完整的解释。

标签: xml xpath


【解决方案1】:

来自http://www.w3.org/TR/xpath/#attribute-nodes

每个元素节点都有一个关联的 属性节点集;元素是 每个属性的父级 节点;然而,一个属性节点是 不是其父元素的子元素。

只有元素节点有属性。

根节点不是元素。来自http://www.w3.org/TR/xpath/#root-node

根节点是树的根。 根节点不会出现,除非 树的根。元素节点 因为文档元素是 根节点。根节点也有 作为孩子处理指令和 用于处理的注释节点 发生的指令和 cmets 在序言和结束之后 文档元素。

因此您不能像/@*/attribute::* 那样选择根节点的属性

你问:

我是否误解了一些关于 根节点还是?

是的。您不应将根节点(抽象)与文档元素(有时也称为元素根)混淆

【讨论】:

    【解决方案2】:

    如果我应该这样写 XPath 我得到类型属性为什么我有 写:

    /child::widget/attribute::type
    

    不是这样的

    /attribute::type
    

    XPath 表达式

    /attribute::type
    

    表示

    选择typeXML文档根节点的属性

    但是,根节点没有属性(根据 W3C Spec),因此,上面的 XPath 表达式什么都不选择。

    你想要

    /widget/@type
    

    这意味着

    选择 XML 文档的type顶部元素的属性(名为widgetXML 文档

    我是否误解了一些关于 根节点还是?因为我以为 '/' 和小部件是一样的...

    永远记住根节点/ 不是一个元素。根据W3C XPath Spec

    【讨论】:

      猜你喜欢
      • 2011-10-31
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多