关于根节点的简单XPath问题

时间:2011-04-06 19:10:12

标签: xml xpath

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

  

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

来自book的样本xml:

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

如果我应该编写XPath,那么我得到type属性为什么我必须写:

/子::插件/属性::型

而不喜欢这个/ attribute :: type

我是否误解了根节点或?因为我认为'/'和小部件是相同的......

谢谢

2 个答案:

答案 0 :(得分:5)

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

  

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

只有元素节点具有属性。

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

  

根节点是树的根。   除了as之外,不会发生根节点   树的根。元素节点   对于文档元素是一个孩子   根节点。根节点也有   作为儿童处理指导和   注释节点进行处理   发生的说明和评论   在序言和结束后   文件要素。

因此,您无法像/@*/attribute::*

那样选择根节点的属性

你问:

  

我是否误解了一些事情   根节点或?

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

答案 1 :(得分:2)

  

如果我应该编写XPath   我得到type属性为什么我有   写:

/child::widget/attribute::type
     

而不喜欢这个

/attribute::type

XPath表达式

/attribute::type

表示

选择XML文档根节点的 type 属性

但是,根节点没有属性(根据 W3C Spec ),因此,上面的XPath表达式不会选择任何内容。

你想要

/widget/@type

这意味着

选择XML文档的顶级元素(名为type widget 属性。< / p>

  

我是否误解了一些事情   根节点还是?因为我想   '/'和widget是一样的......

始终记住根节点/不是元素。,根据 W3C XPath Spec