Duvida sobre SAX

3 respostas
M

Fala galera,

Tenho 2 arquivos. Um CSV e outro XML. Preciso ler o CSV e a partir dos dados lidos no CSV setar valores dos atributos no XML e devolver essa XML como string.

Ex:

Arquivo CSV
nome;Zézinho
idade;12

Arquivo XML(na real, é um campo de um BD)

<nome value="" idade="">

Depois do processo preciso ter:

<nome value=“Zézinho” idade=“12”>

Hj tudo isso é feito usando DOM. Já tentei usar o SAX mas não obtive sucesso na hora de setar os campos. Alguem conhece alguma maneira de modificar a API para aumentar a performance ??

OBS: Não posso mudar a forma como foi implementado. Só preciso de uma API que substitua a DOM.

Valeu
MedioCore

3 Respostas

cv1

Tem certeza que a performance ta sendo comida pelo DOM mesmo? Se for esse mesmo o caso, e vc estiver totalmente desesperado, pode jogar fora o DOM e usar o bom e velho StringBuffer, desde que vc tome bastante cuidado com os encodings e com caracteres possivelmente maldosos (<, >, ?, &, ", / e por ai vai).

Nao fica muito elegante, mas de performance pelo menos ninguem vai poder reclamar :smiley:

C

O DOM armazena todos os dados na memória e só então cria um XML, serializando os dados para o arquivo, assim o maior problema do DOM é a utilização de memória, e não necessáriamente performance.

O SAX não é bom para isso, ele seria mais útil se você pretende-se o oposto, ler um XML e então salvar em um formato específico qualquer (CSV por exemplo, ou exportá-lo para uma base de dados).

Antes de mudar a API, verifique se o problema não está no seu algoritmo, se ele não pode ser otimizado. Você pode tentar otimizar a utilização de memória também, lendo apenas trechos dos arquivos e serializando.

Claro que tudo depende de seu objetivo, mas acho que não vale a pena abandonar o DOM sem antes fazer algumas tentativas assim. Qualquer coisa, estamos, ai.
Abraço.

M

Então cv,

tinha pensado em abandonar o XML e fazer o parser na mão mas não róla.

vou dar mais uma garimpada no código pra ver se acho algum ponto que pode ser mudado !!

Obrigado a todos
MedioCore :evil:

Criado 22 de janeiro de 2004
Ultima resposta 22 de jan. de 2004
Respostas 3
Participantes 3