0

在 xpath 表达式中,$node/*为什么不将文本节点作为子节点包含在内?这是否仅仅是因为 xpath 是这样定义的?

4

2 回答 2

2

这是否仅仅是因为 xpath 是这样定义的?

差不多。在XPath 1.0 规范的第 2.3 节中,它说:

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

此外,在第 2.5 节中,它说:

  • *选择上下文节点的所有子元素
于 2013-07-23T18:13:37.430 回答
2

很难回答“为什么”的问题。您是否在询问有关做出决定的过程的历史问题,例如两种方式都提出了哪些论点以及投票如何进行?或者你只是在问一个最好的猜测——谁能想到一个合理的语言设计者会选择这样做的原因?有时当人们问“为什么”的问题时,他们的意思是完全不同的,比如“规范中的什么规则说语言应该这样表现?”。这就是@BoltClock 选择解释它的方式。您提出问题的方式,我发现很难知道您正在寻找哪种答案。

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

于 2013-07-23T21:35:00.700 回答