Groovy の XmlSlurper で XML 要素が存在するかどうかを判断しようとしています。これを行う方法はありますか?例えば:
<foo>
<bar/>
</foo>
bar 要素が存在するかどうかを確認するにはどうすればよいですか?
Groovy の XmlSlurper で XML 要素が存在するかどうかを判断しようとしています。これを行う方法はありますか?例えば:
<foo>
<bar/>
</foo>
bar 要素が存在するかどうかを確認するにはどうすればよいですか?
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())
GPathResultのisEmptyメソッドは機能します。
def text = "<foo><bar/></foo>"
def xml = new XmlSlurper().parseText(text)
assert false == xml.bar.isEmpty()
バー要素が空であるため、これは私を悩ませます-それは本体を持っていません。しかし、GPathResultは空ではないと思うので、おそらくこれは理にかなっています。