Perl的XML :: SemanticDiff - 在存在差异时获取属性值

时间:2014-06-18 10:53:43

标签: xml perl whitespace

为这个问题提前道歉,我是Perl的新手。

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

<tag attribute="value">

<tag attribute="  value  ">

我不想把它视为一个区别。 XML :: SemanticDiff调用element_value方法。如何获取新旧属性值的值,以便我可以删除空白并进行比较?文档提到这可以使用keepdata参数(我已添加)来完成,但是对Perl不熟悉我不明白当我在element_value方法时如何实际获取数据。

提前致谢, 托马斯

1 个答案:

答案 0 :(得分:0)

如果要在XML属性中忽略封闭间距,我建议您在尝试比较文档之前将其删除。

以下使用XML::LibXML来删除嵌入式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 version="1.0"?>
<root>
<tag attribute="value"/>
</root>