另一个关于带有 SoapUI 和属性转移的 XPath 结构 - 嵌套的重复标记



又是一个问题。这次我认为是因为标签在同一条消息中使用了两次,嵌套。

检索具有唯一标签(如 requestDateTimestatusDateTimecompletedStateEnteredDate(的其他项目没有问题,但我无法成功获取<som>参考号、状态(内部状态(或类型(再次,在另一个 <type> 标签内(。

所以我知道我的命名空间有效,只是无法弄清楚如何获取我需要的数据。具体来说,我需要在<som>6000526</som>部分中捕获该数值。数据确实返回多个 SOM 编号,因此好处是如何捕获多个 SOM 编号(例如前 2 个或 5 个会很酷(。

<return>
    <success>true</success>
    <networkUpdateList>
       <confirmationDue>
          <actualDays>26</actualDays>
          <actualHours>11</actualHours>
          <actualMinutes>57</actualMinutes>
          <businessDays>22</businessDays>
          <businessHours>7</businessHours>
          <businessMinutes>57</businessMinutes>
          <negative>true</negative>
       </confirmationDue>
       <confirmingCarrierId>11567</confirmingCarrierId>
       <numbers>
          <donorCarrierId>11657</donorCarrierId>
          <gainingCarrierId>11667</gainingCarrierId>
          <losingCarrierId>11657</losingCarrierId>
          <number>
             <phoneNumber>098453520</phoneNumber>
          </number>
       </numbers>
       <som>
          <requestDateTime>2017-04-11T10:08:01+12:00</requestDateTime>
          <som>6000526</som>
          <status>
             <status>GC and LC Complete</status>
          </status>
          <statusDateTime>2017-04-11T10:09:09+12:00</statusDateTime>
          <type>
             <type>Port</type>
          </type>
          <completedStateEnteredDate>2017-04-11T10:09:09+12:00</completedStateEnteredDate>
       </som>
    </networkUpdateList>

使用此 XPath 表达式获取所需的结果:

/return/networkUpdateList/som/som

结果:

<som>6000526</som>

这甚至适用于不同networkUpdateList节点的多个<som>元素子级。

我错开了解决方案,适用于所有重复的名称:
SOM/SOM完成这项工作。
就像//status/status 和//type/type 一样,所以我是一个快乐的露营者。我只是不知道如何在响应中选取下一个事件,但我并不迫切需要它,我可以循环。
编辑:还发现

(//som/som) [2]返回第二个匹配项,并且 (//som/som( [1] 返回第一个匹配项,依此类推。非常简单,很高兴知道。
在此处发现:https://msdn.microsoft.com/en-us/library/ms256086(v=vs.110(.aspx

创建脚本断言并使用以下代码:

// create groovyUtils and XmlHolder for response of Request 1 request
def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
def holder = groovyUtils.getXmlHolder( "SOAP Request#Response" )
// loop item nodes in response message
for( item in holder.getNodeValues( "//som/som" ))
    log.info "Item : [$item]" 

这应该打印出 XPath 后面的每个节点的所有值。在脚本中断言日志应按以下格式输出:

周三 3月 21 14:46:14 GMT 2018:信息:项目 : [0.69]

2018年3月21日星期三 14:46:14 GMT:信息:项目 : [4.14]

周三 3月 21 14:46:14 GMT 2018:信息:项目 : [0.69]

周三 3月 21 14:46:14 GMT 2018:信息:项目 : [0.69]

周三 3月 21 14:46:14 GMT 2018:信息:项目 : [1.6]

2018年3月21日星期三 14:46:14 GMT:信息:项目 : [3.45]

周三 3月 21 14:46:14 GMT 2018:信息:项目 : [1.85]

最新更新