XML :: LibXML :: Reader需要在模式错误而不是退出时发出警告

问题描述 投票:2回答:1

基本上,我需要使用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 linux perl xml-libxml
1个回答
1
投票

[好吧,不完全是我最初的要求,但是如果有人感兴趣,我已经找到了解决方案。我只是将--stream开关用于xmllint命令。这使我可以在具有4GB内存的系统上验证大于1GB的XML文件。没有--stream开关,这是不可能的。

© www.soinside.com 2019 - 2024. All rights reserved.