1

我已经编写了一个 REST 服务来访问 MySQL 数据库。该服务将很快移植到使用 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 元素是否具有相同的 name 值?我知道有一个count功能,但我不确定它的使用程度如何。

4

1 回答 1

4

所以问题是,在 XPath 或 XQuery 中是否有办法测试“Karl”在结果中出现一次,“Anton”出现两次,“Friedrich”出现一次?

使用

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
于 2012-11-21T01:41:56.247 回答