2012-07-16 51 views
1

差别是最佳实践当结果不是一个序列? (如果是,那么前者基本上不能使用)

任何我忘记的或者他们在这种情况下是完全可以交换的吗?

回答

1

在XPath 2.0此表达式引发错误如果参数到name()功能是与一个以上的项目的序列:

name(/Data/element1/element2) 

在XPath 1.0这不是错误name()使用节点集中的第一个节点作为它的参数。

两者同样没用,因为一眼就知道结果必须是"element2"

当结果不是序列(如果是的话, 然后前者基本上不能使用),这是最好的做法?

此作品在这两种情况下的XPath 2.0/XQuery的

/Data/element1/element2/name() 
+0

对于零件“结果在元素2中已知”,我更改了一个有点这个想法的例子。我的意思是动力选择,也许我做得太简单了 – Whimusical 2012-07-16 14:36:07

1

确定不同的是,没有任何区别,因为它是相同的功能,因为名称()等于名称( ),所以它不是一个不同的语法。它发生的是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 

因此,当我们希望只有一个出现,名称(complete_expression)可以有利的,因为我们可以为我们的假设添加一个额外的验证步骤,但替代也具有强点,我们可以准备处理表达式(数组)的多个输入的地形,如果有一天数据发生变化并且这是有效的和预期的

相关问题