Как мне найти текст узла, который имеет определенное значение для атрибута в groovy? - PullRequest
1 голос
/ 15 марта 2012

Я использую XMLSlurper.Мой код ниже (но не работает).Проблема заключается в том, что происходит сбой, когда он попадает на узел, который не имеет атрибута «id».Как мне это учесть?

//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"
};

Мне просто нужно учесть узлы без атрибута "id", чтобы он не работал.Как мне это сделать?

Ответы [ 2 ]

1 голос
/ 15 марта 2012

Вы также можете использовать нотацию GPath и проверить, является ли "@id" пустым первым.

Следующий фрагмент кода находит последний элемент (поскольку атрибут id равен «B», а значение - также «bizz», он выводит «bizz» и «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
0 голосов
/ 15 марта 2012

Очевидно, я могу заставить его работать, когда я просто использую глубину.Итак:

properties[ "finalValue" ] = page.depthFirst().find {
    it.attributes().find { it.key.equalsIgnoreCase( 'id' ) }.value == "myNode"
};
...