如果格式不正确,我有一项任务要更正xml文件的语法。目前我正在手动完成此任务。有没有办法验证XML
文件的语法,如果XML格式不正确,那么将其更正为格式良好?
是否可以使用Perl
脚本进行验证和更正?
谢谢,
答案 0 :(得分:3)
XML::LibXML是一个验证解析器。您可以使用它来确定XML是否有效。
use XML::LibXML qw( );
my $parser = XML::LibXML->new();
if (eval { $parser->parse_file($qfn) }) {
print "ok\n";
} else {
print "error:\n$@";
}
自动更正XML是另一回事。如果不做出巨大的假设,就不可能自动修复错误的XML。例如,无法知道是否
<foo>/bar<baz/</foo>
本来是
<foo>/bar<baz/</foo>
或
<foo>/bar<baz/></foo>
甚至是别的东西。
XML :: LibXML确实有一个选项来自动修复/忽略一些错误。谁知道你做出同样的假设。使用
use XML::LibXML qw( );
my $parser = XML::LibXML->new( recover => $recover );
my $doc = $parser->parse_file($in_qfn);
$doc->toFile($out_qfn);
如果您希望在修复问题时警告解析器,请1
使用$recover
。
如果您希望解析器以静默方式解决问题,请将2
用于$recover
无论你对$recover
使用什么,如果它遇到不可恢复的错误,它仍会抛出异常。
答案 1 :(得分:2)
您可以尝试XML::Liberal:“解析破碎XML的超自由XML解析器”,看看它是否适合您。