检查并更正perl中的xml语法

时间:2013-02-12 06:19:55

标签: xml perl perl-module

如果格式不正确,我有一项任务要更正xml文件的语法。目前我正在手动完成此任务。有没有办法验证XML文件的语法,如果XML格式不正确,那么将其更正为格式良好?

是否可以使用Perl脚本进行验证和更正?

谢谢,

2 个答案:

答案 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&lt;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解析器”,看看它是否适合您。