Groovy XmlSlurper: поиск элементов в структуре XML - PullRequest
12 голосов
/ 30 ноября 2011

Допустим, существует следующая структура 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>

Используя Groovy XmlSlurper Мне нужно сделать следующее:

Начиная с Data найдите тот элемент, который содержит значение Field #1 в элементе <DataFieldName>. Если найдено, то получите значение соответствующего <DataFieldValue>, которое принадлежит тому же уровню.

Ответы [ 2 ]

16 голосов
/ 30 ноября 2011

Если DataFieldName уникально в файле:

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

Если это не так, и вы хотите получить массив со всеми соответствующими значениями DataFieldValues:

println new XmlSlurper()
    .parseText(xml)
    .DataFieldText.findAll {it.DataFieldName == "Field #1"}*.DataFieldValue*.text()
0 голосов
/ 07 декабря 2016
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"    
...