SOAPUI上的XQuery匹配断言

SOAPUI上的XQuery匹配断言,xquery,soapui,Xquery,Soapui,我在SOAPUI中有一个soap测试步骤和一个XQuery匹配 XML(简化)如下所示: <root> <element> <a>a</a> <b>b</b> <c>c</c> <d>d</d> </element> </root> 我期待下一个结果: <b>b

我在SOAPUI中有一个soap测试步骤和一个XQuery匹配

XML(简化)如下所示:

<root>
    <element>
        <a>a</a>
        <b>b</b>
        <c>c</c>
        <d>d</d>
    </element>
</root>
我期待下一个结果:

<b>b</b>
<c>c</c>
<d>d</d>
b
C
D
我认为我的XQuery是正确的,我使用XQuery在线评估器进行了测试,看起来还可以,您可以尝试以下方法

但是,当我在SOAPUI中的XQuery匹配断言中使用此表达式时,我得到以下消息:
当前响应中有多个匹配。如何使用SOAPUI实现这一点


谢谢,

做了一些尝试终于找到了解决方案,在SOAPUI中执行此XQuery的方法是在XQuery表达式中指定一个根节点,即:

<MyResult>
{
for $x in //root/element/element()
return 
if (name($x) != 'a') then $x
else ""
}
</MyResult>

{
对于//root/element/element()中的$x
返回
如果(名称($x)!='a'),则$x
否则“
}

简单地使用XPath表达式
//root/element[local-name()!='a']
?@MarcusRickert谢谢你的回答,但是[local-name()!='a']应用于父节点而不是子节点,SOAPUI将返回一个b c d到你的XPath。如果我在XPath测试仪中将您的XPath建议更改为//root/element/node()[local-name()!='a'],我会得到所需的结果,但是SOAPUI再次返回:“当前响应中有多个匹配项”。您是对的。我想写
//root/element/*[local-name()!='a']
。您的XPath结果中只允许有一个根节点吗?再次感谢@MarcusRickert,但最终我找到了一个解决方案:)。您的回答与我的评论一致。但是,我仍然认为您可以使用我的建议简化您的答案。顺便说一下,XPath
//root/element[name(.)!='a']
与您的查询相同。我建议使用XPath轴:
//root/element/*[not(self::a)]
。通常,最好避免使用
name()
,如果必须使用
node-name()
<MyResult>
{
for $x in //root/element/element()
return 
if (name($x) != 'a') then $x
else ""
}
</MyResult>