在 xpath 表达式中,$node/*
为什么不将文本节点作为子节点包含在内?这是否仅仅是因为 xpath 是这样定义的?
问问题
103 次
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 回答