如何使用Groovy的XmlSlurper检查元素是否存在?

时间:2009-01-26 16:39:39

标签: xml groovy xmlslurper

我正在尝试确定Groovy的XmlSlurper是否存在XML元素。有没有办法做到这一点?例如:

<foo>
  <bar/>
</foo>

如何检查条形元素是否存在?

2 个答案:

答案 0 :(得分:37)

API有点棘手,但我认为有几种更好的方法来寻找孩子。当你要求“xml.bar”(存在)或“xml.quux”而不是groovy.util.slurpersupport.NodeChildren对象时,你得到的是什么。基本上是满足您要求的标准的节点集合。

查看特定节点是否存在的一种方法是检查NodeChildren的大小是否为预期大小:

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

另一种方法是使用find方法,看看返回的节点的名称(不幸的是总是会返回),是你期望的那个:

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())

答案 1 :(得分:17)

GPathResult上的isEmpty方法有效。

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

这让我感到困扰,因为条形元素 为空 - 它没有正文。但我认为GPathResult不是空的,所以也许这是有道理的。