在 XPath 2.0 中使用 min() 或 max() 时的更多条件
More conditions while using the min() or max() in XPath 2.0
为什么在 XPath 2.0 中尝试将 Union 运算符与 'min()' 或 'max()' 函数一起使用时会出现错误?我正在处理的 XML 有一个名为 'quantity' 的对象,其形式如下:
<quantity>
<new>
<value>
18.0
</value>
</new>
<old>
<value>
27.5
</value>
</old>
</quantity>
有时,数量对象是这样的:
<quantity>
<small>
14.25
</small>
</quantity>
如果数量值与 'new' 和 'old' 组合一起出现,我必须选择其中最小的值。因此,为了获取所有需要的数量值,我尝试使用以下 XPath:
def sort = holder.getNodeValues( "//quantity/min(*/@value) | //quantity/small" )
这给了我错误消息“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 -->
documentation for the union operator (in Saxon) 说,
Both expressions [the operands] must return sequences of nodes.
但是,如错误所示,您的第一个操作数 returns 是双精度数(本例中为 18.0)。
要获得所需内容,您可以将 XPath 表达式更改为
"min(//quantity/*/value | //quantity/small)"
请注意,我删除了 @
,因为 value
是一个元素,而不是属性。
为什么在 XPath 2.0 中尝试将 Union 运算符与 'min()' 或 'max()' 函数一起使用时会出现错误?我正在处理的 XML 有一个名为 'quantity' 的对象,其形式如下:
<quantity>
<new>
<value>
18.0
</value>
</new>
<old>
<value>
27.5
</value>
</old>
</quantity>
有时,数量对象是这样的:
<quantity>
<small>
14.25
</small>
</quantity>
如果数量值与 'new' 和 'old' 组合一起出现,我必须选择其中最小的值。因此,为了获取所有需要的数量值,我尝试使用以下 XPath:
def sort = holder.getNodeValues( "//quantity/min(*/@value) | //quantity/small" )
这给了我错误消息“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 -->
documentation for the union operator (in Saxon) 说,
Both expressions [the operands] must return sequences of nodes.
但是,如错误所示,您的第一个操作数 returns 是双精度数(本例中为 18.0)。
要获得所需内容,您可以将 XPath 表达式更改为
"min(//quantity/*/value | //quantity/small)"
请注意,我删除了 @
,因为 value
是一个元素,而不是属性。