Groovy XmlSlurper: Find elements in XML structure
-
26-10-2019 - |
Question
Let's say there is the following XML structure:
<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>
Using Groovy's XmlSlurper
I need to do the following:
Beginning from Data
find that element which contains the value Field #1
in the <DataFieldName>
element. If found then get the value of the corresponding <DataFieldValue>
which belongs to the same level.
Solution
If DataFieldName is unique in a file:
println new XmlSlurper()
.parseText(xml)
.DataFieldText.find {it.DataFieldName == "Field #1"}
.DataFieldValue.text()
If it is not, and you want to get an array with all matching DataFieldValues:
println new XmlSlurper()
.parseText(xml)
.DataFieldText.findAll {it.DataFieldName == "Field #1"}*.DataFieldValue*.text()
OTHER TIPS
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"
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow