【发布时间】:2020-02-15 07:38:03
【问题描述】:
基本上,我需要使用 perl 模块 XML::libXML::Reader 中的 schema 选项,以便在解析文件时验证大型 (>1GB) XML 文件。
之前我使用 xmllint 命令根据给定的模式 (xsd) 文件验证 XML 文件。但是,现在我有一些大型 XML 文件要验证,并且在尝试执行验证时内存不足 (8GB)。
我在 XML::libXML::Reader perl 模块页面上读到有一个架构选项。但是,当我使用它时(参见下面的代码),当找到 XML 文件的第一个无效元素时,代码就会退出。
use strict;
use warnings;
use XML::LibXML::Reader;
my $SchemaFile='schema.xsd';
my $FileToAnalyse='/tmp/file.xml';
my $reader = XML::LibXML::Reader->new(location => $FileToAnalyse,Schema=>$SchemaFile) or
die "cannot read file '$FileToAnalyse': $!\n";
while($reader->read) {
Process the file line by line here, even if not valid against schema (reduces memory usage for large files)
}
我需要收集无效条目并继续而不是退出。这可能吗?
【问题讨论】:
-
吞下 XML::LibXML::Error 异常似乎会使
$reader进入无效状态。 spec 表示解析器可以继续。 -
试试这个教程culturedperl.com/…
标签: xml linux perl xml-libxml