Como posso encontrar o texto de um nó que possui um valor específico para um atributo em groovy?
-
14-12-2019 - |
Pergunta
Eu estou usando XMLSlurper.Meu código está abaixo (mas não de trabalho).O problema é que ele falha quando ele atinge um nó que não tem o atributo "id".Como posso explicar isso?
//Parse XML
def page = new XmlSlurper(false,false).parseText(xml)
//Now save the value of the proper node to a property (this fails)
properties[ "finalValue" ] = page.find {
it.attributes().find { it.key.equalsIgnoreCase( 'id' ) }.value == "myNode"
};
Eu só preciso da conta para nós sem atributo "id" para não falhar.Como faço isso?
Solução 2
Apprently eu posso fazê-lo funcionar, quando eu simplesmente usar depthFirst.Assim:
properties[ "finalValue" ] = page.depthFirst().find {
it.attributes().find { it.key.equalsIgnoreCase( 'id' ) }.value == "myNode"
};
Outras dicas
Alternativamente, você poderia usar o GPath notação, e verifique se a mensagem "@id" é vazia primeiro.
O trecho de código a seguir encontra o último elemento (uma vez que o atributo id é "B" e o valor também é "bizz", ele imprime "bizz" e "B").
def xml = new XmlSlurper().parseText("<foo><bar>bizz</bar><bar id='A'>bazz</bar><bar id='B'>bizz</bar></foo>")
def x = xml.children().find{!it.@id.isEmpty() && it.text()=="bizz"}
println x
println x.@id
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow