使用 groovy xml slurper 过滤 xml 元素删除重复的子节点

Filter xml element removing duplicated child node with groovy xml slurper

我需要过滤一个 xml 列表,以便获得所有没有重复的“元素”。 输入:

<List>
<element>
    <field1>A</field1>
    <field2>1</field2>
</element>
<element>
    <field1>B</field1>
    <field2>2</field2>
</element>
<element>
    <field1>B</field1>
    <field2>2</field2>
</element>
输出
<List>
<element>
    <field1>A</field1>
    <field2>1</field2>
</element>
<element>
    <field1>B</field1>
    <field2>2</field2>
</element>
如何使用 groovy 中的 XmlSlurper 或 XmlParser 实现此目的? 谢谢你。

类似这样的选项:

import groovy.xml.* 

def data = '''
<List>
<element>
    <field1>A</field1>
    <field2>1</field2>
</element>
<element>
    <field1>B</field1>
    <field2>2</field2>
</element>
<element>
    <field1>B</field1>
    <field2>2</field2>
</element>
</List>'''

def xml = new XmlParser().parseText(data)

def writer = new StringWriter() 
def result = new MarkupBuilder(writer).List { 
  xml.element.unique { 
    it.field1.text()
  }.each { n ->
    element { 
      field1(n.field1.text())
      field2(n.field2.text())
    }
  }
}

println writer

当 运行 打印时:

─➤ groovy solution.groovy
<List>
  <element>
    <field1>A</field1>
    <field2>1</field2>
  </element>
  <element>
    <field1>B</field1>
    <field2>2</field2>
  </element>
</List>