Ler xml

4 respostas
david.cs20
Tenho a seguinte estrutura de xml :
<track> 
		<nome>ENG DE POCO</nome> 
		<ordem>1</ordem> 
		<tamanho>128</tamanho> 
		<log>false</log> 
		<lito>false</lito> 
		<area>false</area> 
		<ev>false</ev> 
		<fundoLit>false</fundoLit> 
		<gradeVertical>0</gradeVertical> 
		<simb>1</simb> 
		<simb>2</simb> 
		<simb>3</simb> 
		<simb>6</simb> 
		<simb>7</simb> 
		<simb>38</simb> 
		<simb>42</simb> 
		<simb>44</simb> 
		<simb>45</simb> 
		<simb>512</simb> 
	</track>
Consigo ler todas as partes do xml exeto a do simb pois ele somente mostra a primeira segue parte do codigo que pega os valores dentro do xml:
// le o XML carregando os dados da menssagem em um Vector.
	// retorna o vector contendo as menssagens cadastrados no XML.
	public Vector lerTrack() throws Exception {
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		DocumentBuilder db = dbf.newDocumentBuilder();
		Document doc = db.parse(xmlPathname);

		Element elem = doc.getDocumentElement();
		// pega todos os elementos mensagens do XML
		NodeList nt = elem.getElementsByTagName("track");

		// prepara o vetor
		Vector tracks = new Vector();

		// percorre cada elemento usuario encontrado
		for (int i = 0; i < nt.getLength(); i++) {
			Element tagTrack = (Element) nt.item(i);
		
			
			// pega os dados cadastrado para o usuario atual
			String nome = getChildTagValue(tagTrack, "nome");
			String ordem = getChildTagValue(tagTrack, "ordem" ); 
			String tamanho = getChildTagValue(tagTrack, "tamanho" ); 
			String log = getChildTagValue(tagTrack, "log");
			String lito = getChildTagValue(tagTrack, "lito");
			String area = getChildTagValue(tagTrack, "area");
			String ev = getChildTagValue(tagTrack, "ev");
			String fundoLit = getChildTagValue(tagTrack, "fundoLit");
			Integer gradeVertical = new Integer( getChildTagValue( tagTrack, "gradeVertical" ) );
		
			String simb = getChildTagValue(tagTrack, "simb");

			// cria uma nova instancia do Track com os dados do xml
			Track track = new Track(nome, ordem, tamanho, log, lito, area, ev, fundoLit, fundoLit, gradeVertical, simb);

			// adiciona o usuario na coleção (vector) de usuários do guj
			tracks.addElement(track);

		}

		return tracks;
		
	}

4 Respostas

CintiaDR

Isso não deveria ser mais assim?

<track> 
		<nome>ENG DE POCO</nome> 
		<ordem>1</ordem> 
		<tamanho>128</tamanho> 
		<log>false</log> 
		<lito>false</lito> 
		<area>false</area> 
		<ev>false</ev> 
		<fundoLit>false</fundoLit> 
		<gradeVertical>0</gradeVertical> 
                <simbs>
		  <simb>1</simb> 
		  <simb>2</simb> 
		  <simb>3</simb> 
		  <simb>6</simb> 
		  <simb>7</simb> 
		  <simb>38</simb> 
		  <simb>42</simb> 
		  <simb>44</simb> 
		  <simb>45</simb> 
		  <simb>512</simb> 
               </simbs>
	</track>
david.cs20

Não e aquela estrutura mesmo !

david.cs20

Alguma ideia de como fazer isso ?

Priuli

O xml correto deveria estar como a CintiaDR postou.
Mas se não tiver jeito de alterar o xml vc pode tentar percorrer todas os elementos da tag usando um if para verificar o nome e não buscar pelo nome como esta fazendo…
exemplo:

for (int i = 0; i < nt.getLength(); i++) {  
       Element tagTrack = (Element) nt.item(i);
if(tagTrack.getName().equals("simb")){
   //carrega em uma lista,vetor....
}
          //....
}
Criado 6 de abril de 2011
Ultima resposta 7 de abr. de 2011
Respostas 4
Participantes 3