我有以下XML示例,其中显示了多次出现的节点' ProductCode'属于两个节点&PrevHospProduct'以及' PrevExtrasProducts'。
<ns2:PrevHospProducts>
<ns2:PrevHospProduct>
<ns2:ProductCode>D00</ns2:ProductCode>
<ns2:ExcessPaid>Yes</ns2:ExcessPaid>
</ns2:PrevHospProduct>
<ns2:PrevHospProduct>
<ns2:ProductCode>900</ns2:ProductCode>
</ns2:PrevHospProduct>
</ns2:PrevHospProducts>
<ns2:PrevExtrasProducts>
<ns2:PrevExtraProduct>
<ns2:ProductCode>00A</ns2:ProductCode>
</ns2:PrevExtraProduct>
</ns2:PrevExtrasProducts>
对于此测试,我只对“ProductCode&#39;”中的值感兴趣。他们是PrevHospProduct&#39;的孩子。我对&PrevExtrasProducts&#39;下的任何值都不感兴趣。
我有以下Groovy Script Assertion in SoapUI
来获取&#39; ProductCode&#39;但是测试失败了,因为实际结果也正在恢复,而D00&#39;,&#39; 900&#39;和&#39; 00A&#39;从示例回复。我只希望预期的结果能够选择价值&#39; D00&#39;,&#39; 900&#39;。
def expectedCodes = ['D00','900']
def pxml = new XmlSlurper().parseText(context.response)
def actualCodes = pxml.'**'.findAll{it.name() == 'ProductCode' }*.text() as List
assert expectedCodes.sort() == actualCodes.sort()
答案 0 :(得分:1)
首先需要找到父节点,即PrevHospProduct
,然后获取ProductCode
。
以下是script assertion
:
def expectedCodes = ['D00','900']
def pxml = new XmlSlurper().parseText(context.response)
def actualCodes = pxml.'**'.findAll{it.name() == 'PrevHospProduct'}*.ProductCode*.text() as List
log.info actualCodes
assert expectedCodes.sort() == actualCodes.sort()