我刚刚开始学习XPath,我正在学习没有缩写的语言。
当位置路径以字符'/'开头时,初始上下文节点强制成为根节点...
来自book的样本xml:
<widget type="gadget">
...
</widget>
如果我应该编写XPath,那么我得到type属性为什么我必须写:
/子::插件/属性::型
而不喜欢这个/ attribute :: type
我是否误解了根节点或?因为我认为'/'和小部件是相同的......
谢谢
答案 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文档的顶级元素(名为 我是否误解了一些事情
根节点还是?因为我想
'/'和widget是一样的...... 始终记住根节点type
)的 widget
属性。< / p>
/
不是元素。,根据 W3C XPath Spec 。