我想从消息 wsdl xml 中获取特定值,如下所示
<Message name="InvestorAcctStatement">
<Field name="ExtRef">180120120000331</Field>
<Field name="SeqNum">000001</Field>
<Field name="AC">0000000800100007182</Field>
<Field name="CurCod">IDR </Field>
<Field name="ValDate">20090703</Field>
<Field name="OpenBal">87928063.0000</Field>
<List name="StatLine">
<Record name="StatLine">
<Field name="ExtRef">180120120000331</Field>
<Field name="TrxType">N9293</Field>
<Field name="DC">C</Field>
<Field name="CashVal">10000.0000</Field>
<Field name="Description1">0800100007182</Field>
<Field name="Description2">959508221001000</Field>
<Field name="Description3">324242</Field>
</Record>
</List>
<Field name="CloseBal">87938063.0000</Field>
<Field name="Notes">DR 0640100002095 KE 0800100007182 </Field>
</Message>
groovy 如何从该 xml 中获取特定值?
我已经尝试使用此代码
String dbresponse = '''
<Message name="InvestorAcctStatement">
<Field name="ExtRef">180120120000331</Field>
<Field name="SeqNum">000001</Field>
<Field name="AC">0000000800100007182</Field>
<Field name="CurCod">IDR </Field>
<Field name="ValDate">20090703</Field>
<Field name="OpenBal">87928063.0000</Field>
<List name="StatLine">
<Record name="StatLine">
<Field name="ExtRef">180120120000331</Field>
<Field name="TrxType">N9293</Field>
<Field name="DC">C</Field>
<Field name="CashVal">10000.0000</Field>
<Field name="Description1">DR 0640100002095 KE 0800100007182 </Field>
<Field name="Description2">959508221001000 </Field>
<Field name="Description3"> </Field>
</Record>
</List>
<Field name="CloseBal">87938063.0000</Field>
<Field name="Notes">DR 0640100002095 KE 0800100007182 </Field>
</Message>
'''
xml = new XmlParser().parseText(dbresponse)
xml.each {
if(it.@name == 'ExtRef') {
println it
}
}
当我运行它时返回
Field[attributes={name=ExtRef}; value=[180120120000331]]
我不知道如何调用具体的值,特别是像XML代码上的字段名称CashVal 提前致谢。
为了打印代码中的值,请尝试以这种方式修改循环:
xml.each {
if(it.@name == 'ExtRef') {
println "Name: ${it.@name}"
println "Value: ${it.text()}"
}
}
关于CashVal,这里是非常粗略的实现:
xml.each {
if (it.@name == 'StatLine') {
it.'*'.'*'.each {
if (it.@name == 'CashVal') {
def cashVal = new BigDecimal(it.text())
println "cashVal = $cashVal"
}
}
}
}
仅供您参考。