GPathResults正确相等

时间:2015-01-02 18:22:12

标签: groovy equals xmlslurper

我需要遍历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>

0 个答案:

没有答案