我正在调用一个服务,我得到了以下格式的XML响应。
如何从此响应中的单个键下检索多个值?
我想将所有值存储在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>
答案 0 :(得分:1)
制作地图String
&lt; - &gt; 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" );
答案 1 :(得分: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。
答案 2 :(得分:0)
Guava有一个Multimap
接口和一个ListMultimap
实现,它是列表结构中包含的多个值的键映射(而不是集合或有序集合)。它基本上是Map<K, Collection<V>>
。您还可以找到示例here。至于实际解析XML,在SO上有很多关于它的问题,你可以从this one开始。