有没有一种方法可以使用XPath或XQuery测试SoapUI中无序XML标记中的值



我已经编写了一个访问MySQL数据库的REST服务。该服务将很快被移植到使用MongoDB数据库的较新系统。稍后,它可能会被移植到另一个使用Oracle的系统。

我们为什么要移植这么多并不重要。

在生成的XML中有几个嵌套的标签具有相同的名称,常见的情况是:

样品:

<root>
<level1>
<name>Karl</name>
</level1>
<level1>
<name>Anton</name>
</level1>
<level1>
<name>Friedrich</name>
</level1>
<level1>
<name>Anton</name>
</level1>
</root>

我一直在使用SoapUI来测试系统之间的结果,以确保查询等仍然正常工作。集成测试等等。

所以问题是,在XPath或XQuery中有没有一种方法可以测试"Karl"在结果中出现一次,"Anton"出现两次,"Friedrich"出现一次?我通常只测试//root/level1[1]/name=="Karl"等,但我不能依赖系统之间的一致排序。有没有一种方法可以测试无序的结果?或者,是否有一种方法可以验证正确数量的level1元素是否具有相同的名称值?我知道有一个count函数,但我不确定它能用得有多精细。

所以问题是,在XPath或XQuery中有没有一种方法可以测试结果中"Karl"出现一次,"Anton"出现两次"弗里德里希"出现过一次?

使用

count(/*/level1/name[.='Karl']) = 1
count(/*/level1/name[.='Anton']) = 2
count(/*/level1/name[.='Friedrich']) = 1

这是三个独立的XPath表达式,每个表达式的计算结果都必须为true()

或者,您可以将它们组合成一个XPath表达式,该表达式只能求值一次:

count(/*/level1/name[.='Karl']) = 1
and
count(/*/level1/name[.='Anton']) = 2
and
count(/*/level1/name[.='Friedrich']) = 1