Você pode tentar o dtdgen , um programa que escrevi há muitos anos para gerar um DTD para um documento. Ele não apenas informa se um arquivo grande é bem formado, mas também informa o que está nele (eu o escrevi porque queria saber os dois).
Eu quero verificar a boa formação de um grande arquivo XML. (cerca de 4 GB.)
No entanto, quando tento xmlwf
, tudo o que me diz é
filename.xml: Value too large for defined data type
O que fazer com isso? Existe alguma outra maneira de verificar isso?
(estou usando o debian linux e gentoo linux)
Você pode tentar o dtdgen , um programa que escrevi há muitos anos para gerar um DTD para um documento. Ele não apenas informa se um arquivo grande é bem formado, mas também informa o que está nele (eu o escrevi porque queria saber os dois).
xmllint --noout 4GB.xml
Esse tipo de trabalho.
Também fica sem memória, mas pelo menos verifica algo antes de morrer.
Não tente eu mesmo, mas tente isso:
xmllint --valid 4GB.xml
É uma pergunta mais antiga, mas como ainda não o sugeri:
Perl com XML::Twig
pode lidar com grandes arquivos XML graças a ter um método "purge", que descarta os dados da memória à medida que você avança.
use strict;
use warnings;
use XML::Twig;
my $twig = XML::Twig->new(
twig_handlers => {
_all_ => sub { $_->purge }
}
)->parsefile( 'my_xml_file.xml' );
O manipulador _all_
é acionado em cada elemento do ramo e descarta os dados da memória. Isso é importante em um arquivo 4G, porque a pegada de memória do XML é de cerca de 10x. Mas ele lançará um alerta e abortará se o XML não estiver bem formado:
mismatched tag at line 12, column 27, byte 274 at C:/Perl/lib/XML/Parser.pm line 187.
(mas tenha em mente que ele é abortado, ele só mostrará o erro primeiro encontrado).
Funciona de qualquer maneira nos meus dados de amostra (menores que 4G).
Tags xml