有没有办法使用XPath或XQuery在SoapUI中测试无序XML标签中的值?

时间:2012-11-21 00:36:33

标签: xml xpath xquery soapui

我写了一个关于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函数,但我不确定它是如何精心使用的。

1 个答案:

答案 0 :(得分:4)

  

所以问题是,在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