Ler XML Desconhecido

Fala ae galera…

To com uma dúvida…

Tem como ler um XML sem conhecer a estrutura dele?

Ou melhor… tem como identificar a estrutura de um XML com java?

A idéia é ler um XML gigante e transformar em objetos e persistir isso…

Abraço

Mas como você pretende converter o XML em Objeto se vc não conhece a estrutura?

É isso que eu quero saber =D

Mas isso é fácil:

Le o arquivo XML para conhecer a estrutura e cria uma classe e coloca atributos e métodos dinamicamente via reflection.
Depois lê novamente o XML para criar uma lista com os objetos carregados dinamicamente.

To brincando, eu pelo menos nunca precisei fazer isso, sempre tive acesso a estrutura do XML.

Até tenho acesso a estrutura…

Mas o problema é que ela tem 53 páginas… só o ddt… =S

Você só tem o DTD ou tem o XSD? Se tiver o XSD você pode converter o XSD para uma classe Java usando JAXB ( usando o utilitário xjc que vem junto com o JDK 6.0).

Infelizmente só o DTD… :frowning:

Talvez o Altova ou o Eclipse tenham algum recurso que possibilite criar uma classe Java a partir de um DTD.

O Websphere (WSAD) tem algo parecido com o que você precisaria:

http://publib.boulder.ibm.com/infocenter/wsadhelp/v5r1m2/index.jsp?topic=/com.ibm.etools.dtdeditor.doc/topics/tgenbens.html

[quote=thingol]Talvez o Altova ou o Eclipse tenham algum recurso que possibilite criar uma classe Java a partir de um DTD.

O Websphere (WSAD) tem algo parecido com o que você precisaria:

http://publib.boulder.ibm.com/infocenter/wsadhelp/v5r1m2/index.jsp?topic=/com.ibm.etools.dtdeditor.doc/topics/tgenbens.html

[/quote]

Blz cara…

Valeu…

Vou dar uma olhada…

**Crie um objeto “Document” com esse xml… (Objeto Dom… bla bla bla…)

**Armazene seus elementos desse “doc” em um objeto “Element”

	 Element elem = doc.getDocumentElement();

** Identifique o nó pai

             String noPai = elem.getTagName();

** Crie uma lista de “nodes”

             NodeList nlnv = elem.getElementsByTagName( noPai );

** Brinque com essa lista, que refletirá cada nó filho, neto etc

                      for(int i=0; i<nlnv.getLength(); i++) {
				 XXX = (XXX)nlnv.item(0);
			 }

Acho que é por aí…

:wink:

Bom, se o arquivo for realmente grande, aí vc pode ter problema com estouro de memória se usar o DOM. Então recomendo o JColtrane. Tem um artigo sobre ele na MundoJava desse mês. Usando ele vc poderia selecionar apenas as informações q te interessam e fazer a persistência…

Boa. Vou testar tb. Valeu!