traverse gpathresult example convert xml groovy xmlslurper

gpathresult - traverse xml groovy



Groovy XmlSlurper: encuentra elementos en la estructura XML (2)

Digamos que existe la siguiente estructura XML:

<Data> <DataFieldText> <DataFieldName>Field #1</DataFieldName> <DataFieldValue>1</DataFieldValue> </DataFieldText> <DataFieldText> <DataFieldName>Field #2</DataFieldName> <DataFieldValue>2</DataFieldValue> </DataFieldText> <DataFieldText> <DataFieldName>Field #3</DataFieldName> <DataFieldValue>3</DataFieldValue> </DataFieldText> </Data>

Usando XmlSlurper de Groovy necesito hacer lo siguiente:

A partir de los Data encuentre ese elemento que contiene el valor del Field #1 en el elemento <DataFieldName> . Si se encuentra, entonces obtenga el valor del <DataFieldValue> correspondiente que pertenece al mismo nivel.


Si DataFieldName es único en un archivo:

println new XmlSlurper() .parseText(xml) .DataFieldText.find {it.DataFieldName == "Field #1"} .DataFieldValue.text()

Si no es así, y desea obtener una matriz con todos los DataFieldValues ​​coincidentes:

println new XmlSlurper() .parseText(xml) .DataFieldText.findAll {it.DataFieldName == "Field #1"}*.DataFieldValue*.text()


def xml = """<Data> <DataFieldText> <DataFieldName>Field #1</DataFieldName> <DataFieldValue>1</DataFieldValue> </DataFieldText> <DataFieldText> <DataFieldName>Field #2</DataFieldName> <DataFieldValue>2</DataFieldValue> </DataFieldText> <DataFieldText> <DataFieldName>Field #3</DataFieldName> <DataFieldValue>3</DataFieldValue> </DataFieldText> </Data>""" def payload = new XmlSlurper().parseText(xml) def node = payload.''**''.find() { myNode -> myNode.DataFieldName.text() == ''Field #1'' } value = node.DataFieldValue?.text() println "${value}/n"