Usando JDOM para ler XML

1 resposta
leonardocoutoc

Boa tarde pessoal,

Estou querendo ler este arquivo em xml usando o JDOM, porém, estou com sérias dificuldades… pois o arquivo xml possui as segmentações seguindo o padrão(ElementoRoot , Element , ElementChild ). O problema é que o Element não possui atributo id, por exemplo, para poder fazer vários objeto Lista e as ElementChild tem o mesmo nome, ou seja, sempre é porém sempre contem valores diferente. Bem o que gostaria de fazer é que quando ele encontra-se o ElementChild pecorre-se todos os sempre armazenando o valor em uma váriavel até que chegasse o final da tag Element e depois pegar a próxima Element e fizesse a mesma coisa e assim por diante até encontrar o final da tag ElementoRoot . Seria possivel?!

<ElementRoot>
   <todosResultados>
	<tr>


		<td>2</td>


		<td>18/03/1996</td>


		<td>09</td>


		<td>39</td>


		<td>37</td>


		<td>49</td>


		<td>43</td>


		<td>41</td>


		<td>1</td>


		<td>2.307.162,23</td>


		<td>65</td>


		<td>14.424,02</td>


		<td>4488</td>


		<td>208,91</td>


		<td>NÃO</td>


		<td>0,00</td>


	</tr>


	<tr>


		<td>3</td>


		<td>25/03/1996</td>


		<td>36</td>


		<td>30</td>


		<td>10</td>


		<td>11</td>


		<td>29</td>


		<td>47</td>


		<td>2</td>


		<td>391.192,51</td>


		<td>62</td>


		<td>10.515,93</td>


		<td>4261</td>


		<td>153,01</td>


		<td>NÃO</td>


		<td>0,00</td>


	</tr>


	<tr>


		<td>4</td>


		<td>01/04/1996</td>


		<td>06</td>


		<td>59</td>


		<td>42</td>


		<td>27</td>


		<td>01</td>


		<td>05</td>


		<td>0</td>


		<td>0,00</td>


		<td>39</td>


		<td>15.322,24</td>


		<td>3311</td>


		<td>180,48</td>


		<td>SIM</td>


		<td>717.080,75</td>


	</tr>


	<tr>


		<td>5</td>


		<td>08/04/1996</td>


		<td>01</td>


		<td>19</td>


		<td>46</td>


		<td>06</td>


		<td>16</td>


		<td>02</td>


		<td>0</td>


		<td>0,00</td>


		<td>98</td>


		<td>5.318,10</td>


		<td>5399</td>


		<td>96,53</td>


		<td>SIM</td>


		<td>1.342.488,85</td>


	</tr>
    </todosResultados>
</ElementRoot>

Desde já agradeço à todos,

Leonardo Couto.

1 Resposta

leonardocoutoc

Ae galera,

Consegui fazer a coleta das informações no arquivo XML, tou postando para quem está precisando fazer algo parecido:

package br.com.sinart.mapas.util.parsersXML;

import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.swing.text.AbstractDocument.LeafElement;

import org.jdom.*;
import org.jdom.input.SAXBuilder;

import br.com.sinart.mapas.SorteioMegaSena;

public class LerXMLMega {

	private String tr = "tr";
	private File f;
	private SAXBuilder sb;
	private Document d;
	private Element tagRoot;
	
	public LerXMLMega() throws JDOMException, IOException{
		//Aqui você informa o nome do arquivo XML.
		f = new File("D:\\WorkSpace_JSF\\SistemaMapas\\src\\br\\com\\sinart\\mapas\\configuracao\\megasena.xml");

		//Criamos uma classe SAXBuilder que vai processar o XML4
		sb = new SAXBuilder();

		//Este documento agora possui toda a estrutura do arquivo.
		d = sb.build(f);
		//Recuperamos o elemento root
		tagRoot = d.getRootElement();
		//System.out.println(tagRoot);
		
	}
	
	public List<SorteioMegaSena> lerTodoConteudo(){
		//PEGAR TDS ELEMENTOS DO XML
		List<SorteioMegaSena> list = new ArrayList<SorteioMegaSena>();
		Element todosResultados = tagRoot.getChild("todosResultados");
		List elementos = todosResultados.getChildren();
		Iterator i = elementos.iterator();
		
	
		while (i.hasNext()) { 
			int count = 0;
			SorteioMegaSena sorteioMegaSena =  new SorteioMegaSena();
			Element element = (Element) i.next();
			//A CADA ELEMENT <TR> ENCONTRADO PEGUE OS SEUS CHILD ELEMENTS <TR>
			if(element.getName().equals(tr)){
				Element tr = element;
				List elementosDeTr = tr.getChildren();
				Iterator i2 = elementosDeTr.iterator();
				while (i2.hasNext()) { 
					Element element2 = (Element) i2.next();
					if(count == 0){
						sorteioMegaSena.setNumSorteio(element2.getText());
					}
					if(count == 1){
						 String dataString = element2.getText();
						 DateFormat fmt = new SimpleDateFormat("dd/MM/yyyy");  
						 try {
							java.sql.Date data = new java.sql.Date(fmt.parse(dataString).getTime());
							sorteioMegaSena.setDataSorteio(data);
						} catch (ParseException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						
					}
					if(count == 2){
						sorteioMegaSena.setNumUm(element2.getText());
					}
					if(count == 3){
						sorteioMegaSena.setNumDois(element2.getText());
					}
					if(count == 4){
						sorteioMegaSena.setNumTres(element2.getText());
					}
					if(count == 5){
						sorteioMegaSena.setNumQuatro(element2.getText());
					}
					if(count == 6){
						sorteioMegaSena.setNumCinco(element2.getText());
					}
					if(count == 7){
						sorteioMegaSena.setNumSeis(element2.getText());
					}
					//AQUI ENCERRO O LOOP, POIS SÓ QUERO PEGAR ATÉ O OITAVA CHILDELEMENT<TD> DE CADA ELEMENT <TR>
					if(count >= 8){
						//System.out.println("Brecando...");
						list.add(sorteioMegaSena);
						System.out.println(sorteioMegaSena.getNumUm());
						break;
						
					}
					count = count + 1;
					
				}
				
				
			}
		}
		return list;
	}
	
	public static void main(String[] args) {
		
		try {
			LerXMLMega lerXMLMega = new LerXMLMega();
			List lista = lerXMLMega.lerTodoConteudo();
			Iterator it = lista.iterator();
			
			while (it.hasNext()) {
				SorteioMegaSena sorteio = (SorteioMegaSena) it.next();
				//System.out.println(sorteio.getDataSorteio());
				
			}
		} catch (JDOMException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}

	
}
Criado 27 de abril de 2009
Ultima resposta 4 de mai. de 2009
Respostas 1
Participantes 1