0

我有以下形式的 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 的键-> [值列表]。我实现这一目标的最佳方法是什么?我熟悉基本的 GPath 构造,我认为某种形式的groupBy{}.collectEntries{}可能是合适的,但我似乎无法得到正确的答案。

4

1 回答 1

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
}
于 2013-08-04T19:31:11.200 回答