aparar um arquivo XML da maneira estúpida

2

(veja a solução abaixo)

Eu tenho arquivos XML que eu analiso com um script Python (eu não o escrevi, mas ele faz o trabalho perfeitamente). O problema é que o arquivo XML é grande (~ 1GB) e a análise demora devido ao congestionamento da memória. O arquivo XML está cheio de informações inúteis em certos elementos - qual seria a melhor maneira de se livrar deles? Eu tentei xmlstarlet mas é muito "orientado a XML", ou seja. leva idades pelas mesmas razões que o script Python.

O que eu preciso fazer é livrar-me de determinados elementos de uma maneira estúpida: remover tudo entre <mytag> e </mytag> através do arquivo (há vários <mytag>...</mytag> pares, todos a serem removidos).

Eu realmente aprecio suas ideias, pois tenho certeza de que há boas maneiras de fazer isso sem reinventar a roda.

Obrigado!

EDIT : finalmente terminei com

perl -pe "undef $/;s/<mytag>.*?<\/mytag>//msg" < inputfile.xml > outputfile.xml

que eu também não percebi @Vlad postou.

    
por WoJ 16.02.2012 / 11:12

2 respostas

3

Ao trabalhar com arquivos XML muito grandes, a abordagem recomendada é usar um analisador orientado a eventos SAX. lxml pode fazer isso em Python , aqui está um excelente artigo sobre o tema: XML de alto desempenho analisando em Python com lxml .

Outra opção seria usar algo como sed para remover essas tags do arquivo.

Ou um script Perl :

perl -i.bak -pe 'BEGIN{undef $/;} s/<mytag>.*<\/mytag>//smg' file.xml
    
por 16.02.2012 / 11:57
0

Pesquise e substitua por um editor de texto que possa fazer isso com curingas? De preferência, um que não tente carregar o arquivo inteiro na abertura (ou levará anos). A maioria dos editores Hex também possui recursos de substituição de pesquisa de texto.

    
por 16.02.2012 / 11:47