0

如果 xml 文件的格式不正确,我的任务是更正它们的语法。目前我正在手动执行此任务。有什么方法可以验证XML文件的语法,如果 XML 格式不正确,则将其更正为格式正确?

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

谢谢,

4

2 回答 2

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

如果您希望解析器在解决问题时收到警告,请使用1for 。如果您希望解析器静默解决问题, 请使用for 。 不管你用什么,如果遇到不可恢复的错误,它仍然会抛出异常。$recover
2$recover
$recover

于 2013-02-12T06:52:05.200 回答
2

您可以尝试XML::Liberal:“解析损坏的 XML 的超级自由 XML 解析器”,看看它是否适合您。

于 2013-02-12T09:06:09.383 回答