需要使用Groovy更新标记值
我需要更新类别为测试的TRDCHARGE_AMOUNT的标签值。我已经能够更新其他直接标记的值需要使用Groovy更新标记值,groovy,Groovy,我需要更新类别为测试的TRDCHARGE_AMOUNT的标签值。我已经能够更新其他直接标记的值 <?xml version="1.0" encoding="UTF-8"?> <TRANSACTIONS ASOF_DATE="4/2/2014" CREATE_DATE="4/2/2014" RECORDS="1"> <TRADE> <CUSIP>31384WPS3</CUSIP> <DESC_
<?xml version="1.0" encoding="UTF-8"?>
<TRANSACTIONS ASOF_DATE="4/2/2014" CREATE_DATE="4/2/2014" RECORDS="1">
<TRADE>
<CUSIP>31384WPS3</CUSIP>
<DESC_INSTMT>CREDIT INDUSTRIEL ET COMMERCIAL (N</DESC_INSTMT>
<DESK>a</DESK>
<DESK_TYPE>GEN</DESK_TYPE>
<DTM_2A7>7</DTM_2A7>
<EXECUTION_TIME>4/1/2014 10:03:06.000</EXECUTION_TIME>
<EXEC_TIME_SOURCE>A</EXEC_TIME_SOURCE>
<FUND>VIMVP-FI</FUND>
<INT_AT_MATURITY>536.6666666667</INT_AT_MATURITY>
<INVNUM>-911223</INVNUM>
<TRDCHARGE_set SIZE="2">
- <TRDCHARGE>
<CALC_TYPE>FLAT</CALC_TYPE>
<CATEGORY>TEST</CATEGORY>
<RATE>0.0000000000</RATE>
<TRDCHARGE_AMOUNT>1000.0000000000</TRDCHARGE_AMOUNT>
<TRDCHARGE_SCHEDULE_ID>-111111.0000000000</TRDCHARGE_SCHEDULE_ID>
</TRDCHARGE>
- <TRDCHARGE>
<CALC_TYPE>FLAT</CALC_TYPE>
<CATEGORY>LOCL</CATEGORY>
<RATE>0.0000000000</RATE>
<TRDCHARGE_AMOUNT>50.0000000000</TRDCHARGE_AMOUNT>
<TRDCHARGE_SCHEDULE_ID>-112221.0000000000</TRDCHARGE_SCHEDULE_ID>
</TRDCHARGE>
</TRDCHARGE_set>
</TRADE>
您可以这样做:
import groovy.xml.XmlUtil
def example = '''
<TRANSACTIONS ASOF_DATE="4/2/2014" CREATE_DATE="4/2/2014" RECORDS="1">
<TRADE>
<CUSIP>31384WPS3</CUSIP>
<DESC_INSTMT>CREDIT INDUSTRIEL ET COMMERCIAL (N</DESC_INSTMT>
<DESK>a</DESK>
<DESK_TYPE>GEN</DESK_TYPE>
<DTM_2A7>7</DTM_2A7>
<EXECUTION_TIME>4/1/2014 10:03:06.000</EXECUTION_TIME>
<EXEC_TIME_SOURCE>A</EXEC_TIME_SOURCE>
<FUND>VIMVP-FI</FUND>
<INT_AT_MATURITY>536.6666666667</INT_AT_MATURITY>
<INVNUM>-911223</INVNUM>
<TRDCHARGE_set SIZE="2">
<TRDCHARGE>
<CALC_TYPE>FLAT</CALC_TYPE>
<CATEGORY>TEST</CATEGORY>
<RATE>0.0000000000</RATE>
<TRDCHARGE_AMOUNT>1000.0000000000</TRDCHARGE_AMOUNT>
<TRDCHARGE_SCHEDULE_ID>-111111.0000000000</TRDCHARGE_SCHEDULE_ID>
</TRDCHARGE>
<TRDCHARGE>
<CALC_TYPE>FLAT</CALC_TYPE>
<CATEGORY>LOCL</CATEGORY>
<RATE>0.0000000000</RATE>
<TRDCHARGE_AMOUNT>50.0000000000</TRDCHARGE_AMOUNT>
<TRDCHARGE_SCHEDULE_ID>-112221.0000000000</TRDCHARGE_SCHEDULE_ID>
</TRDCHARGE>
</TRDCHARGE_set>
</TRADE>
</TRANSACTIONS>
'''
new XmlParser().parseText(example).with { x ->
x.TRADE.each { trade ->
trade.children().find { it -> it.name() == 'FUND' }?.value = 'CASH'
trade.children().find { it -> it.name() == 'INVNUM' }?.value = '-675'
trade.children().find { it -> it.name() == 'CUSIP' }?.value = '3B56GTUNN'
trade.TRDCHARGE_set.TRDCHARGE.each {
it.children().find { it.name() == 'TRDCHARGE_AMOUNT'}?.value = 5.0
}
}
println XmlUtil.serialize(x)
}
这会将所有TRDCHARGE_AMOUNT值更改为5.0并打印结果。现在问题出在哪里?我的代码不起作用了吗?或者它工作不好?我已经编辑了这个示例并提供了完整的代码。您可以将其作为groovy脚本执行。
import groovy.xml.XmlUtil
def example = '''
<TRANSACTIONS ASOF_DATE="4/2/2014" CREATE_DATE="4/2/2014" RECORDS="1">
<TRADE>
<CUSIP>31384WPS3</CUSIP>
<DESC_INSTMT>CREDIT INDUSTRIEL ET COMMERCIAL (N</DESC_INSTMT>
<DESK>a</DESK>
<DESK_TYPE>GEN</DESK_TYPE>
<DTM_2A7>7</DTM_2A7>
<EXECUTION_TIME>4/1/2014 10:03:06.000</EXECUTION_TIME>
<EXEC_TIME_SOURCE>A</EXEC_TIME_SOURCE>
<FUND>VIMVP-FI</FUND>
<INT_AT_MATURITY>536.6666666667</INT_AT_MATURITY>
<INVNUM>-911223</INVNUM>
<TRDCHARGE_set SIZE="2">
<TRDCHARGE>
<CALC_TYPE>FLAT</CALC_TYPE>
<CATEGORY>TEST</CATEGORY>
<RATE>0.0000000000</RATE>
<TRDCHARGE_AMOUNT>1000.0000000000</TRDCHARGE_AMOUNT>
<TRDCHARGE_SCHEDULE_ID>-111111.0000000000</TRDCHARGE_SCHEDULE_ID>
</TRDCHARGE>
<TRDCHARGE>
<CALC_TYPE>FLAT</CALC_TYPE>
<CATEGORY>LOCL</CATEGORY>
<RATE>0.0000000000</RATE>
<TRDCHARGE_AMOUNT>50.0000000000</TRDCHARGE_AMOUNT>
<TRDCHARGE_SCHEDULE_ID>-112221.0000000000</TRDCHARGE_SCHEDULE_ID>
</TRDCHARGE>
</TRDCHARGE_set>
</TRADE>
</TRANSACTIONS>
'''
new XmlParser().parseText(example).with { x ->
x.TRADE.each { trade ->
trade.children().find { it -> it.name() == 'FUND' }?.value = 'CASH'
trade.children().find { it -> it.name() == 'INVNUM' }?.value = '-675'
trade.children().find { it -> it.name() == 'CUSIP' }?.value = '3B56GTUNN'
trade.TRDCHARGE_set.TRDCHARGE.each {
it.children().find { it.name() == 'TRDCHARGE_AMOUNT'}?.value = 5.0
}
}
println XmlUtil.serialize(x)
}