Ir para o conteúdo
avarata

Ler XML file

Mensagens Recomendadas

avarata

Bom dia!

Estou a desenvolver um programa que leia um ficheiro XML com parâmetros, só que não consigo saber à priori quantos parâmetros são, nem quantos elementos tem cada parâmetro.

A minha ideia era à medida que ia ler do XML criar logo os objectos à medida de cada parâmetro.

Nesta questão de leitura estou mais familiarizado com o SAXparser, mas estou aberto a novas sugestões.

Thks

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
aladino77

A sua pergunta é um bocado confusa. Por favor reformule a pergunta usando a terminologia do XML, ou seja, elementos, atributos, nós, pai, filho, etc.

O que é que não consigo perceber o que você quer dizer com parâmetros? Seja mais explicito.

Não se esqueça de que serialização de objectos deve respeitar convenções que advêm da relação entre o objecto e os seus campos e tb da relação entre objectos. Por exemplo, a classe Sala tem uma lista de objectos da classe Aluno, ou ainda, a classe Aluno tem os campos nome e idade.

Regra geral, têm-se uma colecção de objectos (Lista, Mapas, Pilhas, etc.

Suponhamos que temos a classe Pessoa com os campos idade e nome

e no ficheiro turmas.xml, temos

<?xml version="1.0"?>

<turmas>

<turma>

<codigo>A25</codigo>

<alunos>

<aluno>

<idade>19</idade>

<nome>Pedro</nome>

</aluno>

<aluno>

<nome>Joana</nome>

</aluno>

</alunos>

</turma>

</turmas>

Exemplo de um parser SAX

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import java.util.*;

public class LerTurmas {
   public static class Aluno {
       public String nome;
       public String idade;
       @Override
           public String toString() {
               return "Aluno nome:" + nome + " idade:" + idade;
           }
   }

   public static class Turma {
       public String codigo;
       public List<Aluno> alunos;
       public Turma() {
           alunos = new ArrayList<Aluno>();
       }
       @Override
           public String toString() {
               String str = "Turma codigo:" + codigo + "\n";
               for (Aluno aluno : alunos) {
                   str += "\t" + aluno + "\n";
               }

               return str;
           }
   }

   public static void main(String argv[]) {

       try {

           SAXParserFactory factory = SAXParserFactory.newInstance();
           SAXParser saxParser = factory.newSAXParser();

           DefaultHandler handler = new DefaultHandler() {

               List<Turma> turmas;
               Aluno aluno;
               Turma turma;
               boolean tagTurmas = false;
               boolean tagTurma = false;
               boolean tagCodigo = false;
               boolean tagAluno = false;
               boolean tagNome = false;
               boolean tagIdade = false;
               public void startElement(String uri, String localName,String qName,
                       Attributes attributes) throws SAXException {
                   System.out.println("Inicio elemento :" + qName);

                   if (qName.equalsIgnoreCase("turmas")) {
                       tagTurmas = true;
                       turmas = new ArrayList<Turma>();
                   }

                   if (qName.equalsIgnoreCase("turma")) {
                       tagTurma = true;
                       turma = new Turma();
                   }

                   if (qName.equalsIgnoreCase("codigo")) {
                       tagCodigo = true;
                   }

                   if (qName.equalsIgnoreCase("aluno")) {
                       tagAluno = true;
                       aluno = new Aluno();
                   }

                   if (qName.equalsIgnoreCase("nome")) {
                       tagNome = true;
                   }

                   if (qName.equalsIgnoreCase("idade")) {
                       tagIdade = true;
                   }
               }

               public void endElement(String uri, String localName, String qName) throws SAXException {
                   System.out.println("Fim elemento :" + qName);
                   if (qName.equalsIgnoreCase("turma")) {
                       turmas.add(turma);
                   }

                   if (qName.equalsIgnoreCase("aluno")) {
                       turma.alunos.add(aluno);
                   }

                   if (qName.equalsIgnoreCase("turmas")) {
                       System.out.println(turmas);
                   }

               }

               public void characters(char ch[], int start, int length) throws SAXException {

                   if (tagCodigo) {
                       turma.codigo = new String(ch, start, length);
                       tagCodigo = false;
                   }

                   if (tagNome) {
                       aluno.nome = new String(ch, start, length);
                       tagNome = false;
                   }

                   if (tagIdade) {
                       aluno.idade = new String(ch, start, length);
                       tagIdade = false;
                   }
               }
           };

           saxParser.parse("turmas.xml", handler);

       } catch (Exception e) {
           e.printStackTrace();
       }

   }
}

Editado por Baderous
geshi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.