Как бы я нашел текст узла, который имеет определенное значение для атрибута в Groovy?

StackOverflow https://stackoverflow.com//questions/9709807

Вопрос

Я использую xmlslurber.Мой код ниже (но не работает).Проблема в том, что она не удается, когда он попадает в узел, который не имеет атрибута «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

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

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

Другие советы

Вы можете альтернативно использовать нотацию 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
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top