Groovy의 XMLSlurper와 함께 요소가 존재하는지 어떻게 확인할 수 있습니까?

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

  •  20-08-2019
  •  | 
  •  

문제

Groovy의 XMLSlurper와 함께 XML 요소가 있는지 여부를 결정하려고합니다. 이것을 할 방법이 있습니까? 예를 들어:

<foo>
  <bar/>
</foo>

막대 요소가 존재하는지 어떻게 확인합니까?

도움이 되었습니까?

해결책

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()

또 다른 방법은 찾기 메소드를 사용하고 반환되는 노드의 이름이 (불행히도 무언가가 항상 반환되는지)를 확인하는 것입니다.

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