Подтвердить что ты не робот

Как проверить наличие элемента с Groovy XmlSlurper?

Я пытаюсь определить, существует ли XML-элемент с Groovy XmlSlurper. Есть ли способ сделать это? Например:

<foo>
  <bar/>
</foo>

Как проверить, существует ли элемент панели?

4b9b3361

Ответ 1

API немного застенчив, но я думаю, что есть несколько лучших способов поиска детей. То, что вы получаете, когда вы запрашиваете "xml.bar" (который существует) или "xml.quux", что нет, является groovy. util.slurpersupport.NodeChildren. В основном набор узлов, отвечающих критериям, которые вы просили.

Один из способов увидеть, существует ли конкретный node, - это проверить размер ожидаемого размера NodeChildren:

def text = "<foo><bar/></foo>"
def xml = new XmlSlurper().parseText(text)
assert 1 == xml.bar.size()
assert 0 == xml.quux.size()

Другим способом было бы использовать метод find и посмотреть, возвращается ли возвращаемое имя node (к сожалению, что-то всегда возвращается), это тот, который вы ожидали:

def text = "<foo><bar/></foo>"
def xml = new XmlSlurper().parseText(text)
assert ("bar" == xml.children().find( {it.name() == "bar"})?.name())
assert ("quux" != xml.children().find( {it.name() == "quux"})?.name())

Ответ 2

Метод isEmpty на GPathResult работает.

def text = "<foo><bar/></foo>"
def xml = new XmlSlurper().parseText(text)
assert false == xml.bar.isEmpty()

Это беспокоит меня, потому что элемент пуст - он не имеет тела. Но я полагаю, что GPathResult не пуст, так что, возможно, это имеет смысл.