33

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

<foo>
  <bar/>
</foo>

如何检查 bar 元素是否存在?

4

2 回答 2

41

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())
于 2009-01-27T03:40:15.137 回答
18

GPathResult 上的 isEmpty 方法有效。

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

这让我很困扰,因为 bar 元素空的——它没有主体。但我想 GPathResult 不是空的,所以也许这是有道理的。

于 2009-01-26T16:53:59.137 回答