0

I need to filter an xml list so to get all the "element" with no duplicates. Input:

<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>
output
<List>
<element>
    <field1>A</field1>
    <field2>1</field2>
</element>
<element>
    <field1>B</field1>
    <field2>2</field2>
</element>
How is it possibile to achieve this with XmlSlurper or XmlParser in groovy? Thank you.

1 Answers1

1

Something like this is an option:

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

which when run prints:

─➤ groovy solution.groovy
<List>
  <element>
    <field1>A</field1>
    <field2>1</field2>
  </element>
  <element>
    <field1>B</field1>
    <field2>2</field2>
  </element>
</List>
Matias Bjarland
  • 4,124
  • 1
  • 13
  • 21