Groovy の XmlSlurper を使用して要素の存在を確認するにはどうすればよいですか?
-
20-08-2019 - |
質問
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が空ではない、ので、多分これは理にかなっていると仮定します。
所属していません StackOverflow