为什么在尝试使用Union运算符以及XPath 2.0中的'min()'或'max()'函数时会出现错误?我正在处理的XML有一个名为'quantity'的对象,其形式如下:
<quantity>
<new>
<value>
18.0
</value>
</new>
<old>
<value>
27.5
</value>
</old>
</quantity>
有时,数量对象如下所示:
<quantity>
<small>
14.25
</small>
</quantity>
如果数量值与“新”和“旧”组合一起出现,我必须选择其中的最小值。因此,为了获取所有所需的数量值,我尝试使用以下XPath:
def sort = holder.getNodeValues(“//数量/分钟(* / @值)| //数量/小”)
这给了我错误消息“ net.sf.saxon.trans.XPathException:'|'的第一个操作数的必需项类型是node();提供的值有项类型xs:double “ - 当我在SoapUI中使用前面提到的XPath时。
有人可以帮我解释为什么Union运营商在这里返回错误?我希望XPath获取XML文档中出现的数量值;当它出现在多个标签下时,我需要选择最小值(例如:'new'和'old')并选择该值,当它显示为单个值时(例如:'small'标签)
在此处添加包含所有可能数量值的代码示例:
<-- Auxillary nodes -->
<quantity>
<new>
<value>
18.0
</value>
</new>
<old>
<value>
27.5
</value>
</old>
</quantity>
<-- auxillary nodes -->
<quantity>
<small>
14.25
</small>
</quantity>
<-- auxillary nodes -->
<quantity>
<weighted>
<value>
18.0
</value>
</weighted>
<median>
<value>
27.5
</value>
</median>
<gross>
<value>
27.5
</value>
</gross>
</quantity>
<-- auxillary nodes -->
答案 0 :(得分:0)
Both expressions [the operands] must return sequences of nodes.
但是,如错误所示,您的第一个操作数将返回一个double(在这种情况下为18.0)。
要获得您正在寻找的内容,您可以将XPath表达式更改为
"min(//quantity/*/value | //quantity/small)"
请注意,我删除了@
,因为value
是一个元素,而不是一个属性。