首页 > 解决方案 > Java SOAPUI XML 排序数组或其他

问题描述

我正在 SoapUI 中构建测试。我有一个非常大的回应(> 3500个职责)。对于该响应,我需要构建一个请求并执行该请求。目前代码(Java)有效,但我想优化代码。

对于每个职责,我构建一个请求以获取额外的员工数据并使用 for next 循环执行它。下面是我得到的大型 XML 响应的示例。

<DUTIES>
    <DUTY>
        <EMPNO>1</EMPNO>
        <LOCATION>AMS</BASE_STATION>
        <ACTUALTIME>2019-02-20T06:00:00</ACTUALTIME>        
        <POSITIONING_CODE>1</POSITIONING_CODE>
    </DUTY>
    <DUTY>
        <EMPNO>2</EMPNO>
        <LOCATION>RTM</BASE_STATION>
        <ACTUALTIME>2019-02-20T06:00:00</ACTUALTIME>        
        <POSITIONING_CODE/>
    </DUTY>
    <DUTY>
        <EMPNO>1</EMPNO>
        <LOCATION>AMS</BASE_STATION>
        <ACTUALTIME>2019-02-21T06:00:00</ACTUALTIME>        
        <POSITIONING_CODE>1</POSITIONING_CODE>
    </DUTY>
</DUTIES>

正如您从示例中看到的那样,同一员工在响应中多次出现,因此目前我正在为同一员工多次调用请求。我想对此进行优化。

在 SoapUI 中,我可以使用以下语句:

String[] emps = resp.getNodeValues("/Duties/Duty/string(EMPNO)");
String[] locs = resp.getNodeValues("/Duties/Duty/string(LOCATION)");
String[] tims = resp.getNodeValues("/Duties/Duty/string(ACTUALTIME)");

然后我想对 emps 上的数组进行排序,并且只在员工更改时构建一个获取额外员工数据的请求。这将使代码更快。

现在我的问题是:最好的方法是什么?使用多维数组并对它们进行排序?或者有没有更好的方法来做到这一点?

提前致谢,

标签: javaarrayssortingsoapui

解决方案


当您检索 empno 时,我将创建一个实例java.util.HashMap<String,String>java.util.HashMap<Long,String>取决于返回的数据类型。

只是盲目地map.put(empno,null)为每个职责元素做一个,之后你只会让每个员工在 hashmap 中一次,因为每次添加相同的键都会覆盖现有的。

之后,简单地

for (String key : map.keySet()) {
  // do your stuff
}

正如我所看到的,你真的不需要对任何东西进行排序就可以到达那里。


推荐阅读