33

Groovy の XmlSlurper で XML 要素が存在するかどうかを判断しようとしています。これを行う方法はありますか?例えば:

<foo>
  <bar/>
</foo>

bar 要素が存在するかどうかを確認するにはどうすればよいですか?

4

2 に答える 2

41

API は少し厄介ですが、子を探すにはもっと良い方法がいくつかあると思います。"xml.bar" (存在する) または存在しない "xml.quux" を要求したときに得られるのは、groovy.util.slurpersupport.NodeChildrenオブジェクトです。基本的には、要求した基準を満たすノードのコレクションです。

特定のノードが存在するかどうかを確認する 1 つの方法は、NodeChildren のサイズが予想されるサイズであることを確認することです。

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

もう 1 つの方法は、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()

バー要素が空であるため、これは私を悩ませます-それは本体を持っていません。しかし、GPathResultは空ではないと思うので、おそらくこれは理にかなっています。

于 2009-01-26T16:53:59.137 に答える