Groovy の XmlSlurper を使用して要素の存在を確認するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/480431

  •  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が空ではない、ので、多分これは理にかなっていると仮定します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top