Perl';s XML::SemanticDiff-在存在差异时获取属性值

Perl';s XML::SemanticDiff-在存在差异时获取属性值,xml,perl,whitespace,Xml,Perl,Whitespace,对于这个问题,我先表示歉意,我是Perl新手 我正在使用比较两个XML文件,并实现了我自己的自定义处理程序。在大多数情况下,它是有效的,但是当我比较两个XML元素时,它们看起来像: <tag attribute="value"> 及 我不想把这算作区别。SemanticDiff调用元素值方法。如何获取新属性值和旧属性值的值,以便删除空白并进行比较?文档中提到,这可以通过keepdata参数(我已经添加了这个参数)来实现,但是作为Perl的新手,当我使用element_val

对于这个问题,我先表示歉意,我是Perl新手

我正在使用比较两个XML文件,并实现了我自己的自定义处理程序。在大多数情况下,它是有效的,但是当我比较两个XML元素时,它们看起来像:

<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>