另一个关于 XPath 结构与 SoapUI 和 属性 传输 - 嵌套重复标签
Another about XPath structure with SoapUI and Property Transfer - nested repeated tags
还有一个问题。
这次我想是因为标签在同一条消息中被嵌套使用了两次。
我可以毫无问题地检索具有唯一标签的其他项目(如 requestDateTime
、statusDateTime
和 completedStateEnteredDate
),但我无法成功获取 <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]
还有一个问题。 这次我想是因为标签在同一条消息中被嵌套使用了两次。
我可以毫无问题地检索具有唯一标签的其他项目(如 requestDateTime
、statusDateTime
和 completedStateEnteredDate
),但我无法成功获取 <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]