Perl';s XML::SemanticDiff-在存在差异时获取属性值
对于这个问题,我先表示歉意,我是Perl新手 我正在使用比较两个XML文件,并实现了我自己的自定义处理程序。在大多数情况下,它是有效的,但是当我比较两个XML元素时,它们看起来像:Perl';s XML::SemanticDiff-在存在差异时获取属性值,xml,perl,whitespace,Xml,Perl,Whitespace,对于这个问题,我先表示歉意,我是Perl新手 我正在使用比较两个XML文件,并实现了我自己的自定义处理程序。在大多数情况下,它是有效的,但是当我比较两个XML元素时,它们看起来像: <tag attribute="value"> 及 我不想把这算作区别。SemanticDiff调用元素值方法。如何获取新属性值和旧属性值的值,以便删除空白并进行比较?文档中提到,这可以通过keepdata参数(我已经添加了这个参数)来实现,但是作为Perl的新手,当我使用element_val
<tag attribute="value">
及
我不想把这算作区别。SemanticDiff调用元素值方法。如何获取新属性值和旧属性值的值,以便删除空白并进行比较?文档中提到,这可以通过keepdata参数(我已经添加了这个参数)来实现,但是作为Perl的新手,当我使用element_value方法时,我不知道如何实际获取数据
提前感谢,,
Thomas如果希望在XML属性中忽略包围间距,我建议您在尝试比较文档之前删除它 下面使用从嵌入的XML文档中删除间距,但是您也可以将其应用于XML文件
use strict;
use warnings;
use XML::LibXML;
my $dom = XML::LibXML->load_xml(IO => \*DATA);
for my $attr ($dom->findnodes('//@*')) {
my $string = $attr->getValue();
if ($string =~ s/\A\s+|\s+\z//g) {
$attr->setValue($string);
}
}
print $dom->toString();
__DATA__
<root>
<tag attribute=" value "/>
</root>
使用严格;
使用警告;
使用XML::LibXML;
my$dom=XML::LibXML->load\uxml(IO=>\*数据);
对于我的$attr($dom->findnodes('/@*')){
我的$string=$attr->getValue();
如果($string=~s/\A\s+\s+\z//g){
$attr->setValue($string);
}
}
打印$dom->toString();
__资料__
产出:
<?xml version="1.0"?>
<root>
<tag attribute="value"/>
</root>
我不确定我是否正确理解了您的问题,我也不知道XML::SemanticDiff,但在该方法中,您可以通过
@
数组访问传递给其调用的所有参数,该数组将按顺序包含所有这些参数。见(除其他外)
<?xml version="1.0"?>
<root>
<tag attribute="value"/>
</root>