Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
avarata

Ler XML file

Recommended Posts

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

Share this post


Link to post
Share on other 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();
       }

   }
}

Edited by Baderous
geshi

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.