我使用以下格式的XML,我使用XmlSlurper解析:
<results>
<result>
<binding name="key">
<uri>http://key/key1</uri>
</binding>
<binding name="value">
<literal>Value 1 for key 1</literal>
</binding>
</result>
<result>
<binding name="key">
<uri>http://key/key2</uri>
</binding>
<binding name="value">
<literal>Value 1 for key 2</literal>
</binding>
</result>
<result>
<binding name="key">
<uri>http://key/key1</uri>
</binding>
<binding name="value">
<literal>Value 2 for key 1</literal>
</binding>
</result>
<result>
<binding name="key">
<uri>http://key/key2</uri>
</binding>
<binding name="value">
<literal>Value 2 for key 2</literal>
</binding>
</result>
</results>
请注意,每个键都有(可能)多个值。我想基本上提取一个关键的MultiMap - &gt; [值列表]。完成此任务的最佳方式是什么?我熟悉基本的GPath结构,我认为某种形式的groupBy{}.collectEntries{}
可能是合适的,但我似乎无法得到正确的答案。
答案 0 :(得分:1)
假设xml存储在一个String变量x
中,一个方法就是:
def map = new XmlSlurper().parseText( x ).result.inject( [:].withDefault{ [] } ) { m, e ->
m[ e.binding.uri.text() ] << e.binding.literal.text()
m
}