2

私はサービスを呼び出しており、以下の形式で XML 応答を受け取ります。

この応答から 1 つのキーで複数の値を取得するにはどうすればよいですか? すべての値をList<String>

<p700:item xmlns:p700="http://abc.test.com">
    <p700:key xsi:type="xsd:string">Key1</p700:key>
    <p700:value xsi:type="xsd:string">Value1</p700:value>
    <p700:value xsi:type="xsd:string">Value2</p700:value>
    <p700:value xsi:type="xsd:string">Value3</p700:value>
    <p700:value xsi:type="xsd:string">Value14</p700:value>
</p700:item>
<p700:item xmlns:p700="http://abc.test.com">
    <p700:key xsi:type="xsd:string">Key1</p700:key>
    <p700:value xsi:type="xsd:string">Value1</p700:value>
    <p700:value xsi:type="xsd:string">Value2</p700:value>
</p700:item>
4

3 に答える 3

1

マップを作成するString<-> List<String>

Map<String, List<String>> map = new HashMap<...>();

次のコードを使用して値を追加します。

List<String> values = map.get( key );
if( null == values ) {
    values = new ArrayList<String>();
    map.put( key, values );
}

values.add( "xxx" );
于 2012-10-08T15:19:50.860 に答える
0

Map<String, List<String>>質問の下のコメントに記載されたくない場合は、マップを繰り返し処理して、手動でリストに追加できます。

List<String> theList = new ArrayList<String>();
String theKey = "The Key";
for(Map.Entry<String, String> entry : map.entrySet()) {
    if(entry.getKey().equals(theKey)) {
        theList.add(entry.getValue());
    }
}

もちろん、これは、XLSからにデータを既に抽出していることを前提としていますMap<String, String>。そうでない場合は、それはまったく別の問題です。

XLSを取り込むためのパッケージが必要な場合は、JXLSを検討してください。

于 2012-10-08T15:19:32.543 に答える
0

Guava にはMultimapインターフェイスとListMultimap実装があります。これは、リスト構造に含まれる複数の値へのキーのマップです (セットまたはソートされたセットとは対照的に)。それは本質的にMap<K, Collection<V>>です。ここで例を見つけることもできます。実際に XML を解析することに関しては、ここ SO でいくつかの質問があり、この質問から始めることができます

于 2012-10-08T16:16:32.753 に答える