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_NEW}の{NPV}を変更すると、結果の HashMap は次のようになります。

BPV     = -395.79435433174876;
NPV_NEW = 26960.051401523993

テンプレート XML を解析して、パターン {.+} と一致する値を持つタグを見つけたら、そのタグの元の XML を検索します。次に、テンプレート XML のキーと元の XML の値を使用して、ハッシュマップにエントリを配置します。

何か良い方法はありますか?変数値を持つノードを見つけるたびに元の XML を解析するのは、少し効率が悪いと思います。

4

1 に答える 1

0

XStreamをチェックしましたか?

また、これは、XML をjava.util.Mapに変換する方法とその逆の重複である可能性がありますXStream

大量の XML 応答がない限り、XStream は解析に十分高速であり、おそらく自分で XML を解析するよりも高速であると思います (しかし、これは推測にすぎません。なぜなら、あなたが本当に賢い方法を思い付くかどうかはわかりません. :)) .

于 2013-09-11T06:57:21.947 に答える