Image Image Image Image Image
Scroll to Top

Topo

23

nov
2011

Sem Comentários

Em Blog
NodeJs

Por Allison

NodeJS – análise e processamento de grandes documentos XML

Em 23, nov 2011 | Sem Comentários | Em Blog, NodeJs | Por Allison

Se você está trabalhando com dados legados, muitas vezes deve ter problemas com o tamanho dos dados. Um tempo atrás, eu tive que analisar grandes arquivos XML, extrair alguns dados, convertê-los, adicionar manualmente os dados gerados e então salvar o output em um arquivo JSON. (Precisamos disso porque mais tarde esse arquivo será usado como input para nosso componente ExtJS/Sencha).

Na minha máquina de desenvolvimento, o NodeJS já está instalado. Dê uma olhada no guia de instalação NodeJS, se você quiser instalá-lo. Agora você pode escrever programas executáveis em JavaScript baseados no mecanismo V8 do Google.

Eu fiz o download da SAX XML parser library para o NodeJS (escrita por isaacs). É bastante fácil incluí-la no meu espaço de trabalho, apenas adicione uma linha simples para incluir “sax.js”. O segundo componente de que preciso é o arquivo do sistema para ler o conteúdo do arquivo XML.

var fs = require('fs');
var sax = require('./sax');

A primeira coisa que você tem que fazer é criar uma nova instância do parser.

parser = sax.parser(strict);

O parser sozinho está trabalhando orientado a eventos, como quase tudo no NodeJS. Quando você está usando um parser orientado a eventos XML, é bastante útil usar um diagrama de estados – pois é mais fácil compreender o tipo de nó que você está visitando atualmente.

Agora existem alguns ganchos pré-definidos que você pode usar para escutar eventos como open tag, close tag etc…

parser.ontext = function(t) {
   console.log('This is the text in that node: ' + t);
};

parser.onopentag = function(node) {
   //on new tag opened
};

No final, a única coisa que você tem que fazer é iniciar o processo do parser. Apenas leia o conteúdo do arquivo em um String buffer (chamado file_buf) e então o coloque na biblioteca do parser.

try {
    var file_buf = fs.readFileSync('./demistified.xml');
    parser.write(file_buf.toString('utf8')).close();
} catch(ex) {
    // keep 'em silent
}

Nos ganchos do evento, você pode começar a escrever sua própria estrutura de dados, o NodeJS é construído para analisar e segurar muitos dados complexos. No meu caso, eu tinha um arquivo de 20 MB de dados XML, e eu extraí 180 nós de dados dessa imensa quantidade em apenas 2 segundos.

No final, se você precisar que sua estrutura interna de dados (provavelmente você usará array e combinações de objetos) seja salva em um arquivo, você pode facilmente utilizar o comando:

fs.writeFileSync('test.json', JSON.stringify(DataNodeSpace));

Ele escreve o array DataNodeSpace no formato JSON no arquivo test.json.

Para modificar, atravessar, adicionar propriedades a um array ou objeto no JavaScript ou no NodeJS, é bastante fácil e rápido. Eu fiquei maravilhado com a rapidez com que você pode construir um parser XML (10 linhas de código) e depois da (mais ou menos complexos *g*) execução dos algoritmos de análise você pode transformar os elementos de dados fácil e confortavelmente.

Espero que você tenha tido uma pequena visão geral sobre como analisar arquivos XML no NodeJS.

Texto original disponível em http://blog.lagentz.com/nodejs/nodejs-parsing-and-transforming-large-xml-documents/

Fonte: IMasters

Redes Sociais

Tags | , , ,

Enviar um Comentário