É a primeira vez que eu estou tentando parsear um xml com DOM. Depois de procurar no google e no fórum, não consegui achar uma maneira que me pareça inteligente de parsear um XML
A pergunta é a seguinte: alguém sabe uma maneira melhor de fazer isso emporcalhando menos o código?
Eu tinha visto o XPath, parece ficar melhor, mas pelo o que eu entendi ele não é distribuido junto com o JRE1.4, aí ferrou… já que essa aplicação roda numa applet e tem que ser o mais lightweight possível…
Bem, você pode usar o XStream, cujo jar tem apenas 110kb. Mas se isso for demais pra você, vai ter que se acostumar com o DOM mesmo. Leia com cuidado a api dele, tem uns métodos interessantes.
V
Vegetto
Eu conheço o xstream, mas como o formato do XML não sou eu que controlo, não rola nesse caso…
Se precisar escrever de volta, pode arriscar usar um tal de XML Vomiter, é um projeto de um fulano aí
kuchma
Existe uma outra API chamada JDOM que eh interessante para fazer parse/geracao de XML tambem.
Marcio Kuchma
V
Vegetto
Obrigado todos! mas tanto o Commons Digester como o JDOM são bibliotecas muito grandes, o que impossibilita que eu as use…
Uma maneira que eu estou testando agora é fazer o downcastind de um Node para um Element, assim eu consigo usar o getElementsByTagName e elemino o for os Ifs…
Vou colocar o código aqui, caso alguém futuramente tenha o mesmo problema que eu tive…
Não tanto, mas ele tem dependências externas… aí que pega…
valew!
renatosilva
:shock: ih então ferrou, nem sabia disso, que feio
Eu tava pensando em criar uma parada que fosse o contrário do XML Vomiter, como o Digester, e que fosse independente e pequeno, com o controle que o XStream não dá, mas sem usar XPath. A ferramenta trabalharia diretamente sobre o texto do documento sem transformá-lo em nós DOM ou usar SAX, ou coisa parecida.
Porém parsear um XML é um pouco mais complicado do que gerá-lo.
V
Vegetto
Legal esse esquema, Renato…
Eu estava pensando até em fazer algo com regexp pra evitar de carregar todos os jars de parsers da sun e talz… Mas eu me lembrei que eu li, em algum lugar, que quando você usa expressões regulares para solucionar um problema, você ganha dois outros… Na época me pareceu bastante razoável a colocação do cara que escreveu isso…
renatosilva
Mas por que você precisa economizar espaço?
Mesmo com as dependências acho que o Digester não passa de 1MB.
V
Vegetto
renato3110:
Mas por que você precisa economizar espaço?
Mesmo com as dependências acho que o Digester não passa de 1MB.
Porque a aplicação roda numa applet, e com cento e poucos Kb já há reclamação de demora para carregar… imagei com um 1mb
renatosilva
É você já falou isso mas eu não prestei atenção…
Bem, então vamos fazer uma ferramenta leve para isso!!!
Razoavel por que? Pra mim parece FUD de quem nao sabe como aplicar as regexp.
Marcio Kuchma
V
Vegetto
Razoavel por que? Pra mim parece FUD de quem nao sabe como aplicar as regexp.
Marcio Kuchma
Marcio,
Dependendo do que vai ser feito com regexp o trabalho que vai dar pra manter não compensa. Mas é isso que você disse, tem que saber aonde aplicar, sair por aí usando em tudo, não é uma boa. E esse era o argumento do cara que disse isso.
Vegetto, penso que achar uma tag e atributos dentro de um texto é fácil até, mas o problema é fazer a recursividade, sendo que tive uma idéia para resolver isso: quando for preciso analisar tags dentro de tags você delega a um método separado que receberá apenas aquele trecho, e assim sucessivamente até chegar nos elementos “atômicos” (sem filhos).
É a mesma idéia do vomiter, mas no sentido contrário.
Por isso não teria XPath.
Vegetto:
Bora ae… só não posso agora pois estou enroscadão…
Eu também estou enrolado, mas quando tivermos disponíveis, podemos nos contactar.
Luca
Olá
Para ficar bem levinho e rodar numa boa com applets é melhor usar simplesmente arquivos CSV (separados por vírgula). Quando isto não é possível porque quem escreveu o XML não é uma aplicação dentro da mesma empresa então a gente vai no google e pesquisa por parser xml lite. Aí se acha coisas assim:
Para ficar bem levinho e rodar numa boa com applets é melhor usar simplesmente arquivos CSV (separados por vírgula). Quando isto não é possível porque quem escreveu o XML não é uma aplicação dentro da mesma empresa então a gente vai no google e pesquisa por parser xml lite. Aí se acha coisas assim:
Legal, hoje em dia para qualquer coisa que se queira fazer, já existe alguma coisa pronta. O problema é que eu tenho mania de criar minhas próprias coisas, é esquisito. Além de não ter saco de ficar lendo as documentações dessas ferramentas.
kuchma
Vegetto:
Dependendo do que vai ser feito com regexp o trabalho que vai dar pra manter não compensa. Mas é isso que você disse, tem que saber aonde aplicar, sair por aí usando em tudo, não é uma boa. E esse era o argumento do cara que disse isso.
Sei que isso esta off-topic neste post, mas nao custa defender as regexp (para que nao fique impressao errada em quem nao conhece o negocio):
The notion that everything is a stream of bytes is utterly braindead.
The notion that regexps are the solution to all problems is equally
braindead.
Just like Perl.
Some people, when confronted with a problem, think “I know, I’ll use
regular expressions.” Now they have two problems.
Tudo bem - o cara esta certo. E voce tambem esta certo. Tem que saber quando usar. Mas tem sua utilidade (e que utilidade), principalmente em busca e substituicao de textos. Nenhuma tecnologia serve para tudo. E eh isso - off-topic encerado.
Marcio Kuchma
V
Vegetto
Obrigado mais uma vez, Luca!
E Marcio, concordo totalmente com o que você disse também!