处理xml解析器错误

2 xml perl xml-libxml

我有很多XML文件,我必须阅读它们,然后看看它们是否有效.我有一些文件与缺少endtag有问题.现在我的任务是编写一个读取这些文件的代码,只在有无效文件时打印错误消息和文件名,然后转到下一个文件.

我是Perl和XML的新手.但是,如果我知道如何处理有错误,那么我可以休息.我所知道的是,我在代码中有这样一行并读取XML文件,然后查找解析.如果不正常则会在命令行中产生错误.我的目标是有条件然后我会写一条消息.

 use strict;
 use warnings;
 use XML::LibXML;
 use XML::Simple;
 use XML::LibXML::XPathContext qw( );
 use XML::Writer;

 # reads all file
 my @testFile = <*.xml>;

 my $arrSize = @testFile;
 XML::LibXML::XPathContext->new()
 my $doc = XML::LibXML->load_xml(location => $ver);
 my $name_ver = $xml->findnodes('/Info/Name',$doc);
 ##  do some other things
Run Code Online (Sandbox Code Playgroud)

我希望这在某种程度上清楚我的意思.任何人都可以让我知道我怎么能写一个不允许代码停止的条件,而是去其他行并打印一条消息.

Sob*_*que 5

将解析操作包装在一个eval和陷阱中$@.

使用库我更了解:

#!/usr/bin/env perl
use strict;
use warnings; 
use XML::Twig; 

foreach my $file ( glob "*.xml") {
     eval { XML::Twig -> new() -> parsefile ( $file ) }; 
     if ( $@ ) { 
          print "$file not valid XML: $@\n"; 
     }
     else {
          print "$file parsed successfully\n";
     }
}
Run Code Online (Sandbox Code Playgroud)

这种方法应该适用于Perl中的大多数XML解析器,因此只是说明性的.根据设计和规范,破碎的XML应该是一个致命的错误.