Como fazer consultas XPath de linha de comando em grandes arquivos XML?

9

Eu tenho uma coleção de arquivos XML, e alguns deles são bem grandes (até ~ 50 milhões de nós de elementos). Estou usando xmllint para validar esses arquivos, o que funciona muito bem mesmo para os grandes graças à API de streaming.

xmllint --loaddtd --stream --valid /path/to/huge.xml

Recentemente aprendi que xmllint também é capaz de fazer consultas XPath de linha de comando, o que é muito útil.

xmllint --loaddtd --xpath '/root/a/b/c/text()' /path/to/small.xml

No entanto, essas consultas XPath não funcionam para os grandes arquivos XML. Acabei de receber uma mensagem "Killed" depois de algum tempo. Tentei ativar a API de streaming, mas isso não leva a nenhuma saída.

xmllint --loaddtd --stream --xpath '/root/a/b/c/text()' /path/to/huge.xml

Existe uma maneira de ativar o modo de fluxo ao fazer consultas XPath usando xmllint ? Existem outras / melhores maneiras de fazer consultas XPath de linha de comando para grandes arquivos XML?

    
por MRA 18.05.2015 в 16:21
fonte

2 respostas

3

Se suas expressões XPath forem muito simples, tente xmlcutty .

Na página inicial:

  

xmlcutty é uma ferramenta simples para esculpir elementos de grandes arquivos XML, rapidamente. Como funciona de forma contínua, ele quase não usa memória e pode processar cerca de 1G de XML por minuto.

    
por gioele 28.10.2016 / 10:48
fonte
-1

a alteração ulimits pode funcionar. Tente isto:

$ ulimit -Sv 500000
$ xmllint (...your command)
    
por ajslaghu 19.02.2018 / 13:05
fonte