0

我从 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}更改为{NPV_NEW},则生成的 HashMap 应该是:

BPV     = -395.79435433174876;
NPV_NEW = 26960.051401523993

我认为在解析模板 XML 时,当您找到一个值与模式 {.+} 匹配的标签时,会通过该标签的原始 XML 搜索。然后将条目与模板 XML 的键和原始 XML 的值一起放入 Hashmap。

有没有更好的办法?我认为每次找到具有可变值的节点时,解析原始 XML 的效率可能会有点低。

4

1 回答 1

0

你检查过 XStream吗?

这也可能是如何将 XML 转换为 java.util.Map 的副本,反之亦然,他们也谈到了XStream.

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

于 2013-09-11T06:57:21.947 回答