2012-03-14 5 views
1

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

//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», чтобы он не терпел неудачу. Как мне это сделать?

ответ

0

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

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

Вы также можете использовать нотацию 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{[email protected]() && it.text()=="bizz"} 
println x 
println [email protected]