Xquery的区别
name(/Data/element1/element2[@ID=$ID]),
和
/Data/element1/element2[@ID=$ID]/name()
当结果不是序列时,哪种是最佳做法? (如果是,那么前者基本上不能使用)
我忘记了什么,或者在那种情况下他们完全可以互换?
答案 0 :(得分:1)
在XPath 2.0中,如果name()
函数的参数是包含多个项目的序列,则此表达式会引发错误:
name(/Data/element1/element2)
在XPath 1.0中,这不是错误,name()
将其作为参数用作节点集中的第一个节点。
两者同样毫无用处,因为一眼就知道结果必须是"element2"
。
当结果不是序列时,哪种是最佳实践(如果是, 然后前者基本上不能使用了吗?
这适用于XPath 2.0 / XQuery中的两种情况:
/Data/element1/element2/name()
答案 1 :(得分:1)
好的区别在于没有区别,因为它是相同的函数,因为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)可能会受到青睐,因为我们可以为我们的假设添加额外的验证步骤,但替代方案还有一个强点,即我们可以准备地形来处理多个输入。表达式(数组),如果某天数据发生变化且有效且预期