另一个关于 XPath 结构与 SoapUI 和 属性 传输 - 嵌套重复标签

Another about XPath structure with SoapUI and Property Transfer - nested repeated tags

还有一个问题。 这次我想是因为标签在同一条消息中被嵌套使用了两次。

我可以毫无问题地检索具有唯一标签的其他项目(如 requestDateTimestatusDateTimecompletedStateEnteredDate),但我无法成功获取 <som> 参考数字,或状态(在状态内)或类型(同样,在另一个 <type> 标签内)。

所以我知道我的命名空间有效,只是不知道如何获取我需要的数据。 具体来说,我需要在 <som>6000526</som> 部分捕获该数值。数据确实 return 多个 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]
Returns 第二次出现,然后 (//som/som) [1] returns 第一次出现,等等。非常简单,很容易知道。
在这里发现: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 之后的每个节点的所有值。在脚本中Assertion Log应该输出如下格式:

Wed Mar 21 14:46:14 GMT 2018:INFO:Item : [0.69]

Wed Mar 21 14:46:14 GMT 2018:INFO:Item : [4.14]

Wed Mar 21 14:46:14 GMT 2018:INFO:Item : [0.69]

Wed Mar 21 14:46:14 GMT 2018:INFO:Item : [0.69]

Wed Mar 21 14:46:14 GMT 2018:INFO:Item : [1.6]

Wed Mar 21 14:46:14 GMT 2018:INFO:Item : [3.45]

Wed Mar 21 14:46:14 GMT 2018:INFO:Item : [1.85]