使用XML :: Twig,如何检查两个节点是否具有完全相同的子节点和属性?

时间:2012-07-04 20:26:13

标签: perl xml-parsing perl-module xml-twig

这是一个简短的XML文件,其中2个节点具有相同的子节点(但具有2个不同的值)。

节点MIAMI

5000

7777为节​​点WASHINGTON

<country id="USA">
<city id="MIAMI" method="modify">
    <attributes>
        <number_people>5000</number_people>
        <average_income>40</average_income>
    </attributes>
</city>

<city id="WASHINGTON" method="modify">
    <attributes>
        <number_people>7777</number_people>
        <average_income>40</average_income>

    </attributes>
 </city>
</country>

使用Perl :: Twig,我想检查节点MIAMI和WASHINGTON是否为IDENTICAL(具有相同的子节点和相同的值)。

这是我所做的不起作用 ($ M-> children eq $ W-&gt; children)被发现为TRUE。 它应该是假的,因为“number_people”值是不同的。

#!/usr/bin/perl -w
use warnings;
use XML::Twig;

my $t= XML::Twig->new;
my $v= XML::Twig::Elt->new;

$t-> parsefile ('file.xml');
my $M=$t->first_elt('city');            # retrieve node MIAMI 
my $W=$M->next_sibling('city');    # retrieve node WASHINGTON


if ($M->children eq $W->children) {print "the two nodes are exactly IDENTICAL"; } 

1 个答案:

答案 0 :(得分:2)

有关模块Data::Compare的内容,它有助于递归地比较两个perl数据结构。

我检查模块XML :: Twig的文档,你可以使用方法simplify获得任何TWIG对象的结构。所以$M->children->simplify