为这个问题提前道歉,我是Perl的新手。
我正在使用XML::SemanticDiff比较两个XML文件,并实现了我自己的自定义处理程序。在大多数情况下它都有效,但是当我比较两个XML元素时,它们看起来像:
<tag attribute="value">
和
<tag attribute=" value ">
我不想把它视为一个区别。 XML :: SemanticDiff调用element_value方法。如何获取新旧属性值的值,以便我可以删除空白并进行比较?文档提到这可以使用keepdata参数(我已添加)来完成,但是对Perl不熟悉我不明白当我在element_value方法时如何实际获取数据。
提前致谢, 托马斯
答案 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>