Groovy XmlSlurper: поиск элементов в структуре XML

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


person Robert Strauch    schedule 30.11.2011    source источник


Ответы (2)


Если 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()
person socha23    schedule 30.11.2011
comment
очень впечатляет, после прочтения я чувствую себя обязанным пойти и реорганизовать весь мой код XmlSlurper (прокляните вас) - person Dónal; 30.11.2011
comment
Разве это не List из NodeChildren? Лучше могло быть: new XmlSlurper().parseText( xml ).DataFieldText.findAll { it.DataFieldName.text() == 'Field #1' }*.DataFieldValue*.text() - person tim_yates; 30.11.2011

person    schedule
comment
Добро пожаловать в Stackoverflow. Когда вы даете ответ, включите текст о том, почему ваш ответ работает и чем он отличается от решения, на которое вы ответили ранее. - person buczek; 07.12.2016