У меня есть метод, который должен искать XML-файл, который был проанализирован с использованием XmlParser для элемента по имени, и вернуть его, только если этот элемент является конечным узлом. Например:
class xmlTest extends GroovyTestCase {
def void test(){
def xmlBody = """
<rootElement>
<elementWithOneChild>
<endElement>Here is the end</endElement>
</elementWithOneChild>
<elementWithManyChildren>
<one>1</one>
<two>1</two>
<three>1</three>
</elementWithManyChildren>
</rootElement>"""
def parsedBody = new XmlParser().parseText(xmlBody)
def search1 = parsedBody.depthFirst().grep({it.name() == "elementWithOneChild"})
println search1[0].children().size()
def search2 = parsedBody.depthFirst().grep({it.name() == "endElement"})
println search2[0].children().size()
def search3 = parsedBody.depthFirst().grep({it.name() == "elementWithManyChildren"})
println search3[0].children().size()
}
}
Моя попытка использовать Node.children (). Size () работает, за исключением случая 1 к 1, когда элемент содержит один дочерний элемент. В этом случае search1.children (). Size () и search2.children (). Size () оба возвращают 1. Хотя размер для elementWithManyChildren равен 3. Я ищу какой-нибудь способ сообщить конечному узлу кроме элемента с одним ребенком.
Один способ, который я нашел для работы:
try{
search1[0].children().iterator().next().name()
}catch(e){
//If the next node does not have a name, it is an end node
}
Но это решение кажется плохим.