我有一个回复,其中包含许多返回的值。我只想传输一个特定的值。我该怎么做?
<lookupData>
<entry>
<key>CREDITCARD</key>
<value>
<item>{"information":"Master Card","nameOnCard":"John","cardNumber":"558732******5605","cardExpiry":"92016","description":"MASTER CARD 5605","verified":"false","pmId":"DxcyAUk9MEE8REp2U2FgUWRdFmVCFH4RX3NUZH9QZ1MYZQ8\u003d","defaultPM":"false"}</item>
</value>
</entry>
</lookupData>
在<item>
标记中,我只想传输pmId
。我如何在 SoapUI 中进行此操作?
非常感谢
答案 0 :(得分:0)
在纯XPath中,您可以使用此表达式
substring-before(substring-after(//lookupData/entry[key="CREDITCARD"]/value/item, ',"pmId":"'), '","defaultPM"')
在item
lookupData
key
CREDITCARD
中找到,"pmId":"
元素,并在","defaultPM"
和//lookupData/entry[key="CREDITCARD"]/value/item/pmId
之间提取字符串 {1}}。
您也可以尝试使用XPath直接读取JSON,因为SOAPUI converts JSON to XPath。将JSON转换为XML,路径为{{1}}。
答案 1 :(得分:0)
您在XML中嵌入了JSON。我不相信有一种方法可以用纯XPath提取它,除非你想采用像@helderdarocha建议的字符串操作。 你可以在Groovy中做到这一点:
def lookupData = new XmlSlurper().parseText("${context.currentStep.name}#ResponseAsXml")
def item = new JsonSlurper().parseText(lookupData.entry.value.item.toString())
// at this point you can access the value
println item.pmId.value
// so you can do something like
testRunner.testCase.setPropertyValue("prop_name", item.pmId.value)
有可能优化此代码,但我希望你明白这一点。