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

Nat*_*enn 7 xml xpath

我一直在研究XPath解析器,这里使用语法作为参考.我很惊讶有一个@带有a 的符号KindTest是可能的.的KindTest可以是node(),comment(),text(),或processing-instruction(xyz)(它们没有测试节点类型).

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

G. *_*man 11

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

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

  • 该语言的设计者选择保持轴和NodeTest正交,即使在实际中不存在轴和节点类型的组合.正交性被认为是语言设计的一种资产,但人们可以争论; Saxon对此类案件发出警告.如果你开始禁止那些无用的东西,那就是"家长作风" - 你会阻止人们编写像`xx [true()]`或`$ x + 0`这样的东西,不是因为它们没有很好地定义,而是因为你看不出有人想写这样东西的任何理由. (4认同)
  • 霍尔曼先生,欢迎来到SO!XSL答案的质量刚刚提升一个档次...... (2认同)

Lar*_*rsH 7

NateGlenn,它不是@comment()内置于语法中的.这只是的组合@,并comment()没有特别禁止的.

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

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

它更像是期待1 / 0或被sqrt(-1)C.的语法所禁止.