我从Webservice收到以下XML:
<ns1:irsValorationReturn xmlns:ns1="http://webServices.es">
<ns1:error xsi:nil="true"/>
<ns1:format>dd/MM/yyyy</ns1:format>
<ns1:pricingDate>02/09/2013</ns1:pricingDate>
<ns1:results>
<ns1:items>
<ns1:bpv>-395.79435433174876</ns1:bpv>
<ns1:npv>26960.051401523993</ns1:npv>
<ns1:payingNpv>0.0</ns1:payingNpv>
<ns1:pricingDelta>342.85778485967523</ns1:pricingDelta>
<ns1:receivingNpv>26960.051401523993</ns1:receivingNpv>
<ns1:swapRate>0.6811631117640043</ns1:swapRate>
</ns1:items>
</ns1:results>
</ns1:irsValorationReturn>
我需要将这个XML转换为HashMap。 HashMap的条目必须是变量,具体取决于下面模板中的密钥{}({KEY OF HASHMAP})之间的值。 Hashmap中相应键的值将是WebService XML响应的原始值,即
BPV = -395.79435433174876;
NPV = 26960.051401523993
...
<ns1:irsValorationReturn xmlns:ns1="http://webServices.es">
<ns1:error xsi:nil="true"/>
<ns1:format></ns1:format>
<ns1:pricingDate><ns1:pricingDate>
<ns1:results>
<ns1:items>
<ns1:bpv>{BPV}</ns1:bpv>
<ns1:npv>{NPV}</ns1:npv>
<ns1:payingNpv>{PAYING_NPV}</ns1:payingNpv>
<ns1:pricingDelta>{PRICING_DELTA}</ns1:pricingDelta>
<ns1:receivingNpv>{RECEIVING_NPV}</ns1:receivingNpv>
<ns1:swapRate>{SWAP_RATE}</ns1:swapRate>
</ns1:items>
</ns1:results>
</ns1:irsValorationReturn>
如果我为 {NPV_NEW} 更改 {NPV} ,则生成的HashMap应为:
BPV = -395.79435433174876;
NPV_NEW = 26960.051401523993
我在解析模板XML中想到了当你找到一个带有与模式{。+}匹配的值的标签时,搜索该标签的原始XML。然后将条目放在Hashmap中,其中包含模板XML的键和原始XML的值。
还有更好的方法吗?我认为每次找到具有可变值的节点时,解析原始XML都会有点效率低。
答案 0 :(得分:0)
您是否检查了XStream?
这也可能与How to convert XML to java.util.Map and vice versa重复,他们也会谈到XStream
。
除非你有一个巨大的XML回复,否则我认为XStream的速度足以进行解析,并且可能比自己解析XML更快(这是一个猜测,因为我不知道你是否想出一个非常聪明的方法。 :))。