Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 在XPath 2.0中使用min()或max()时的更多条件_Xml_Xpath_Soapui - Fatal编程技术网

Xml 在XPath 2.0中使用min()或max()时的更多条件

Xml 在XPath 2.0中使用min()或max()时的更多条件,xml,xpath,soapui,Xml,Xpath,Soapui,为什么在XPath 2.0中尝试将Union运算符与“min()”或“max()”函数一起使用时会出现错误?我正在处理的XML有一个名为“quantity”的对象,其形式如下: <quantity> <new> <value> 18.0 </value> </new> <old> <value> 27.5 </value> </old> </

为什么在XPath 2.0中尝试将Union运算符与“min()”或“max()”函数一起使用时会出现错误?我正在处理的XML有一个名为“quantity”的对象,其形式如下:

<quantity>
  <new>
  <value>
  18.0
  </value>
  </new>

  <old>
  <value>
  27.5
  </value>
  </old>
</quantity>

18
27.5
有时,quantity对象显示如下:

<quantity>
  <small>
  14.25
  </small>
</quantity>

14.25
在数量值与“新”和“旧”组合出现的情况下,我必须从中选择最小的值。因此,为了获取所有所需的数量值,我尝试使用以下XPath:

def sort=holder.getNodeValue(“//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 -->

18
27.5
14.25
18
27.5
27.5

但是,如错误所示,第一个操作数返回一个double(本例中为18.0)

要获得所需内容,可以将XPath表达式更改为

"min(//quantity/*/value | //quantity/small)"

请注意,我删除了
@
,因为
值是一个元素,而不是一个属性。

感谢您的响应,但要求获取所有数量值,而不是最小的数量值。当一个对象中有两个量值时,只有在那个时候,我们才能找到最小的值。您建议的修改只为我返回一个值,这是所有数量值中最小的。是否有任何方法可以实现这一点?我在min()函数外指定第二个XPath的原因是,当它与“small”标记一起出现时,只有一个数量值(无需比较和选择最低值)因此,我需要在多个实例中出现时选择最低值:“def sort=holder.getNodeValues(“//quantity/min(*/@value)),或者在缺少标记值时从下面的XPath中进行选择(因为当XPath不存在时,我们会得到空值):“def sort=holder.getNodeValues(//quantity/small”)@Vishnuvardhan:当您只有一个
元素的
值时,尝试我建议的XPath表达式会得到什么结果?
min()
在只包含一个节点的节点集上运行良好。当我测试上述XPath时,根据我对您的需求的理解,它运行良好;尝试一下如果它给您一个错误的结果,请发布输入XML、您使用的表达式、确切的期望结果和实际结果。当我尝试d您建议的XPath。在我的XML中,最多可以有100个或更多类似的quantity对象。我必须选择所有的值,如果我们单独处理'small'标记,则可以使用“//quantity/small”。但值可能出现在两层(新的和旧的)在这种情况下,我要选择其中最小的一个。因此,当有两个范围时,我必须让XPath选择最小的,当处理单个值时,按原样选择值。因此,不可能使用min()这里?@Vishnuvardhan:好的,我到现在还不明白你可以有多个
元素。你提供的示例应该
作为根元素,其中只能有一个。请编辑你的问题,发布一个包含多个
元素的示例,包括
,所以我正试图解决与您相同的问题。为什么人们在没有留下评论的情况下否决了这个问题?
"min(//quantity/*/value | //quantity/small)"