我一直在研究XPath解析器,语法here作为参考。我很惊讶,@
符号KindTest
是可能的。 KindTest
可以是node()
,comment()
,text()
或processing-instruction(xyz)
(他们会测试Node Type)。
我的问题是这些与@
符号组合时的作用; 。 @processing-instruction("xyz")
,@comment()
,@node
和@text
做了什么?他们是否在搜索带有处理说明或评论的属性?
答案 0 :(得分:11)
@comment()
是一个有效的XPath位置路径步骤表达式,保证不返回任何内容。从技术上讲,它要求在属性轴上找到所有注释节点(并且您永远不会找到任何注释节点)。
我告诉我的学生/..
是一种更紧凑,更易读的编写完整位置路径的方法,保证不返回任何内容。从技术上讲,它要求根节点的父节点。
答案 1 :(得分:7)
NateGlenn,并不是@comment()
内置于语法中。只是@
和comment()
的组合并非特别禁止。
如您所知,@
只是attribute::
轴的缩写。 Axes内置于语法中。节点测试(如node()
和comment()
)构建在语法的单独部分中。
为了使语法禁止组合@comment()
,必须有一个特殊情况。除了返回空节点集之外,您可以考虑其他没有多大意义的组合:例如parent::text()
。
这就像期望{C}的语法禁止1 / 0
或sqrt(-1)
一样。