Xquery 之间的区别
name(/Data/element1/element2[@ID=$ID]),
和
/Data/element1/element2[@ID=$ID]/name()
当结果不是序列时,哪个是最佳实践?(如果是,那么前者基本不能用)
我忘记了什么,或者在那种情况下它们完全可以互换吗?
name()
在 XPath 2.0 中,如果函数的参数是包含多个项目的序列,则此表达式会引发错误:
name(/Data/element1/element2)
在 XPath 1.0 中,这不是错误,name()
它使用节点集中的第一个节点作为其参数。
两者同样无用,因为一看就知道结果一定是"element2"
。
当结果不是序列时哪个是最佳实践(如果是,则基本上不能使用前一个)?
这适用于 XPath 2.0 / XQuery 的两种情况:
/Data/element1/element2/name()
好的,区别在于没有区别,因为它是同一个函数,因为 name() 等于 name(.),所以它不是不同的语法。它发生的是 name(X) 应该始终包含一个输出不超过 1 次的表达式。
所以我们可以使用:
/Data/name(./element1/element2) = /Data/name(element1/element2)
* element2, if a single occurrence in the whole data
/Data/element1/name(./element2) = /Data/element1/name(element2)
* element2, if a single occurrence per any element1, for each element1
/Data/element1/element2/name() = /Data/element1/element2/name(.)
* element2, no matter num of occurrences, we print them all
因此,当我们预计只出现一次时,name(complete_expression) 可能会受到青睐,因为我们可以为我们的假设添加一个额外的验证步骤,但替代方案还有一个优点是我们可以准备地形以处理表达式的多个输入(数组) 如果有一天,数据发生变化并且这是有效且预期的