从XML模板构造变量HashMap对象

时间:2013-09-11 06:48:22

标签: java xml xslt xml-parsing

我从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都会有点效率低。

1 个答案:

答案 0 :(得分:0)

您是否检查了XStream

这也可能与How to convert XML to java.util.Map and vice versa重复,他们也会谈到XStream

除非你有一个巨大的XML回复,否则我认为XStream的速度足以进行解析,并且可能比自己解析XML更快(这是一个猜测,因为我不知道你是否想出一个非常聪明的方法。 :))。