将搜索限制为Groovy XML中的兄弟姐妹?

时间:2013-08-04 18:41:08

标签: xml groovy

我使用以下格式的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{}可能是合适的,但我似乎无法得到正确的答案。

1 个答案:

答案 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
}