为什么* xpath缩写不包含文本节点?

时间:2013-07-23 18:09:30

标签: xpath

在像$node/*这样的xpath表达式中,为什么文本节点不包含在子节点中?这是因为这就是xpath的定义方式吗?

2 个答案:

答案 0 :(得分:2)

  

这是因为这就是xpath的定义方式吗?

差不多。在section 2.3 of the XPath 1.0 spec中,它说:

  

对于主节点类型的任何节点,节点测试*都为真。例如,child::*将选择上下文节点的所有元素子节点,attribute::*将选择上下文节点的所有属性。

此外,在section 2.5中,它说:

  
      
  • *选择上下文节点的所有元素子项
  •   

答案 1 :(得分:2)

回答“为什么”的问题非常困难。您是否在询问有关决策过程的历史问题,例如:什么论据是双向推进的,投票方式如何?或者你只是要求最好的猜测 - 有人能想到一个合理的语言设计师会选择这样做的原因吗?有时,当人们问“为什么”这些问题时,他们的意思是完全不同的,比如“规范中的哪些规则说语言应该采用这种方式?”。这就是@BoltClock选择解释它的方式。你表达问题的方式,我发现很难知道你正在寻找哪种答案。

显然,它本可以采用不同的方式;而不是a/*选择所有元素子元素而a/node()选择所有类型的子元素,它可能分别是a/element()a/*。我对基本原理的猜测是,选择所有元素被认为是更常见的用户需求。但当然,当语言设计师使用这种理由时,他们会猜测用户会想要做什么。