'@comment()'在XPath中做了什么?

时间:2013-06-20 20:18:51

标签: xml xpath

我一直在研究XPath解析器,语法here作为参考。我很惊讶,@符号KindTest是可能的。 KindTest可以是node()comment()text()processing-instruction(xyz)(他们会测试Node Type)。

我的问题是这些与@符号组合时的作用; 。 @processing-instruction("xyz")@comment()@node@text做了什么?他们是否在搜索带有处理说明或评论的属性?

2 个答案:

答案 0 :(得分:11)

@comment()是一个有效的XPath位置路径步骤表达式,保证不返回任何内容。从技术上讲,它要求在属性轴上找到所有注释节点(并且您永远不会找到任何注释节点)。

我告诉我的学生/..是一种更紧凑,更易读的编写完整位置路径的方法,保证不返回任何内容。从技术上讲,它要求根节点的父节点。

答案 1 :(得分:7)

NateGlenn,并不是@comment()内置于语法中。只是@comment()的组合并非特别禁止。

如您所知,@只是attribute::轴的缩写。 Axes内置于语法中。节点测试(如node()comment())构建在语法的单独部分中。

为了使语法禁止组合@comment(),必须有一个特殊情况。除了返回空节点集之外,您可以考虑其他没有多大意义的组合:例如parent::text()

这就像期望{C}的语法禁止1 / 0sqrt(-1)一样。