如何在perl中比较不同元素的XML arrtibute值
我正在编写脚本来比较两个不同文件中如何在perl中比较不同元素的XML arrtibute值,xml,perl,xpath,Xml,Perl,Xpath,我正在编写脚本来比较两个不同文件中元素的属性值,并需要找出属性值中的任何差异。XML代码如下所示。需要比较的属性在book元素中为“revision”: <book fpi="9780133125900" status="PearsonML 9.8" revision="3"> <book fpi="9780133125900" status="PearsonML 9.8" revision="2"> 致以最良好的祝愿, Bhuvana一种方法是使用to_literal
元素的属性值,并需要找出属性值中的任何差异。XML代码如下所示。需要比较的属性在book元素中为“revision”:
<book fpi="9780133125900" status="PearsonML 9.8" revision="3">
<book fpi="9780133125900" status="PearsonML 9.8" revision="2">
致以最良好的祝愿,
Bhuvana一种方法是使用
to_literal()
函数从节点集提取数字。它返回对标量的引用,因此在比较中取消对标量的引用:
#!/usr/bin/env perl
use warnings;
use strict;
use XML::XPath;
#for extracting 'revision' vaue in file1
my $xp = XML::XPath->new(filename => $find);
my $hname = $xp->find('/book/@revision')->to_literal;
##for extracting 'revision' vaue in file2
my $xx = XML::XPath->new(filename => $find1);
my $hnaee = $xx->find('/book/@revision')->to_literal;
if ( $$hname == $$hnaee ) {
print "Equal\n";
}
else {
print "Not equal";
}
您可能应该使用XML::LibXML而不是XML::XPath,它更快、内存效率更高、功能更强大、维护更好。代码将非常相似,因此切换并不困难。非常感谢您的代码。但是使用“if($$hname==$$hnaee)”,我得到了“nota SCALAR”变量。您能检查一下并告诉我吗。@Bhuvana:对于您的XML文件(用一个关闭的
/>
标记修复)和像perl script.pl
一样执行的脚本,我没有收到任何错误。我不知道。检查您是否没有输入错误,或者您的xml数据是否太不同。另外,使用Data::Dumper
并在比较之前打印变量。最后,我添加了代码的这一部分以表明它是有效的,您将需要一个不同的实现,所以请删除它并使用您自己的代码。
#!/usr/bin/env perl
use warnings;
use strict;
use XML::XPath;
#for extracting 'revision' vaue in file1
my $xp = XML::XPath->new(filename => $find);
my $hname = $xp->find('/book/@revision')->to_literal;
##for extracting 'revision' vaue in file2
my $xx = XML::XPath->new(filename => $find1);
my $hnaee = $xx->find('/book/@revision')->to_literal;
if ( $$hname == $$hnaee ) {
print "Equal\n";
}
else {
print "Not equal";
}