我需要遍历XML并根据父母区分元素。我使用Groovy和XmlSlurper。
我知道GPathResults只将equals()实现为text()节点的相等。可悲的是,那些在我的情况下无法使用。
每次获得新的结果对象时,使用cmp via is()似乎毫无意义。我是Groovy中的新手,所以我不想重载equals()方法。
在这种情况下,我想通过其父()来区分这些元素。让我们说我得到了元素的GPathResults' b'存储在变量中。 我如何才能获得特定元素' a' "得到了存储的元素' b'作为最近的父母"?
def xml = ''' <root>
<a type="1"/>
<a type="2"/>
<b>
<a type="1"/>
</b>
</root>
'''.trim()
def slurper = new XmlSlurper(false, false).parseText(xml)
def myParticularB = slurper.b
def wantedA = slurper.depthFirst().find { seg ->
seg.name() == 'a' && seg.@type == '1' && seg.parent() == myParticularB
}
assert (wantedA.parent().name() == 'b') == true
如果我忽略了一些显而易见的事情,我很抱歉。
//一个角落案例
<root>
<a type="1"/>
<a type="2"/>
<b>
<a type="1"/>
<b>
<a type="1"/>
<b>
<a type="1"/>
</b>
</b>
</b>
</root>