Como vocês lêem XML em Java?

Estou precisando parsear uma porrada de XMLs que seguem um DTDzinho bem básico, e estou seriamente pensando em usar o Jakarta Commons-Digester pra isso, mas antes de sair me sujando de código, eu queria saber se tem mais alguma alternativa boa por aí, já que as únicas que eu considerei foram usar SAX e DOM (do Xerces). Qual a sua maneira favorita de ler XML?

[]'s
-cv

Sei que você não gosta muito dele, Carlos, mas eu uso JDOM. Aliás, mesmo que seja muito mais “caro” trabalhar com DOM (já que a árvore inteira vai para a memória), é muito mais prático. Trabalhar com verificações usando DTD com JDOM também é muito fácil.

eu uso sax. consome 1k de memoria :). porem eh meios acal pq vc tem de ficar guardando o path q vc ta neh?

nucna usei DOM, porque como o daniel disse, eh tudo pro heap!
ja o JDOM, eu iamginava q ele colocasse boa parte da arvore na cabeca na hora.

No meu caso, parsear usando uma árvore (DOM) ou eventos (SAX) não é problema, já que os arquivos são pequenos, e o que eu queria mesmo era programar o mínimo possível… idéias?

Já que a idéia é programar o mínimo possível, então use JDOM (já que não tem problema com uso de memória). No site da Oracle Magazine (http://otn.oracle.com/oramag) tem um tutorial bem interessante de como usar o JDOM.
[/url]

Bom, dependendo do caso as vezes eh ate mais simples usar SAX ao inves de DOM. Por exemplo, eh um processamento simples, num documento sem muitas variacoes de tags… SAX acaba sendo rapido de implementar e muito simples de entender tambem ( ja que fica algo mais “procedural” ).

Rafael

se o commons-digester resolve todo teu problema, nem se aventure em usar sax/dom, eh bem mais simples e pratico que as apis genericas.

estava procurando no forum sobre XML e encontrei esta Thread :smiley:

seguinte pessoal, vcs estão falando de fazer o parser no XML, agora a respeito de criar ou alterar o XML?

eu gostei do JDom dá de fazer as duas coisas com ele, ler gravar…

mas o Digester eu só consegui ler… acho que ele não gera XML né?

que outra opção eu tenho para criar um xml ?

thanks :smiley:

[quote=“cv”]Estou precisando parsear uma porrada de XMLs que seguem um DTDzinho bem básico, e estou seriamente pensando em usar o Jakarta Commons-Digester pra isso, mas antes de sair me sujando de código, eu queria saber se tem mais alguma alternativa boa por aí, já que as únicas que eu considerei foram usar SAX e DOM (do Xerces). Qual a sua maneira favorita de ler XML?

[]'s
-cv[/quote]

Minha maneira favorita de ler XML é através do JDOM, pois deixa o código bem limpo

O commons-digester é muito util quando voce quer mapear um xml para objetos já existentes do teu sistema ou realizar diretamente o processamento dele sem criar primeiro uma representação intermediaria.

Porem se voce ta saindo do zero, uma excelente opção é o castor, voce alimenta com um Xml Schema e ele te produz um jogo de classes que realizam parsing, validação e serialização com voce escrevendo 1 linha para cada operação. Ele gera um JavaBean por tipo do schema.

Sei que o Tópico é antigo, mas caso alguém o leia, tente usar o framework JColtrane. Ele usa o SAX por baixo (portanto não consome tanta memória como o JDOM) e oferece algumas facilidade pra não ter que programar tudo na mão. Basta usar anotações e pra XML simples vc não tem praticamente nenhum trabalho.

Sou iniciante no desenvolvimento java e precisei manipular XML, ou seja, cria, ler, alterar etc…
Após ler muitos artigos, optei pelo JDOM e não me arrependi.
Para começar, basta importar o jar para seu projeto e seguir o seguinte tutorial: http://javafree.uol.com.br/topic-847694-Utilizando-JDOM-para-ler-e-gerar-XML.html

[]'s

boa tarde!

particularmente gosto do Xstream. Acho que facilita muito o trabalho.

abraços.

6 anos depois…

import java.io.FileNotFoundException;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.*;



import java.io.*;
import java.util.*;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import org.dom4j.io.DOMReader;

public class LoadWithDOM
{
	public static void main(String[] args)

  	{
	  try
	  {
			LoadWithDOM lWithDOM = new LoadWithDOM();
			org.w3c.dom.Document doc = lWithDOM.loadWithDOM();
			org.dom4j.Document ocDOM=lWithDOM.loadIntoDOM4J(doc);
			lWithDOM.printElements(ocDOM);


	  	}catch(Exception e)
	  	{
		  e.printStackTrace();
	  	}
	}
	public org.w3c.dom.Document loadWithDOM() throws Exception
	{
		//Instantiate a DocumentBuilderFactory.
			DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();

			// And setNamespaceAware, which is required when parsing xsl files
			dFactory.setNamespaceAware(true);

			//Use the DocumentBuilderFactory to create a DocumentBuilder.
			DocumentBuilder dBuilder = dFactory.newDocumentBuilder();
			//Use the DocumentBuilder to parse the XML input.
	        org.w3c.dom.Document xmlDoc = dBuilder.parse("test.xml"); // colocar o xml desejado aqui
	        return xmlDoc;
	}
	public org.dom4j.Document loadIntoDOM4J(org.w3c.dom.Document doc) throws DocumentException, Exception
	{
				DOMReader reader = new DOMReader();
				org.dom4j.Document document = reader.read(doc);
				return document;
	}
	public void printElements(org.dom4j.Document document) throws DocumentException
		{
			Element root = document.getRootElement();
			// iterate through child elements of root
			for ( Iterator i = root.elementIterator(); i.hasNext(); )
			{
				Element element = (Element) i.next();
				// do something
				System.out.println("Element Name:"+element.getQualifiedName() );
				System.out.println("Element Value:"+element.getText());
			}

		}

}

// coloquei o dom4j-1.6.jar na lib e ja era hehehe (peguei este código não lembro onde)

Abs