----- Original Message -----
> From: "marceloptoledo" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Thursday, August 01, 2002 12:35 PM
> Subject: [java-list] Recuperar Dados
>

> Tenho a seguinte StringBuffer no formato XML
>
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <cadastro>
>   <registro>
>     <nome>Marcelo</nome>
>     <email>[EMAIL PROTECTED]</email>
>   </registro>
> </cadastro>
>
> usando alguma api java como fa�o para recuperar o nome e e-
> mail?

A solu��o mais indicada para o seu problema � usar SAX:

Para deixar as coisas organizadas, suponha que voc� tenha uma classe
Registro:

public class Registro {
    private String nome, email;
    // getters e setters p�blicos para nome e email
}

1) Escreva uma classe que estenda org.w3c.sax.DefaultHandler (pode ser uma
classe interna) e implemente o m�todo characters(), para capturar o texto e
startElement()/endElement(), para saber quando o elemento <email> come�a e
termina:

public class MyEmailHandler extends org.w3c.sax.DefaultHandler {

    private boolean inNome, inEmail, inRegistro;
    private Registro registro; // vari�vel tempor�ria
    private java.util.List registros = new java.util.ArrayList();

    // Chamado quando um elemento come�a <elemento ...>
    public void startElement(..., String nomeDoElemento, ...) {
          if ( nomeDoElemento.equals("nome") ) {
              inName = true;
          } else if ( nomeDoElemento.equals("email") ) {
              inEmail = true;
          } else if ( nomeDoElemento.equals("registro") ) {
              inRegistro = true;
          }
     }

     // Chamado quando um elemento termina </elemento>
     public void endElement(..., String nomeDoElemento, ...) {
          if ( nomeDoElemento.equals("nome") ) {
              inName = false;
          } else if ( nomeDoElemento.equals("email") ) {
              inEmail = false;
          } else if ( nomeDoElemento.equals("registro") ) {
              registros.add(registro); // registro terminou? adicione-o �
lista
              registro = null;
              inRegistro = false;
          }
     }

    // Chamado quando um n� de texto � encontrado
    public void characters(char [] buf, int offset, int len) {
         String str = new String(buf, offset, len);
         if (inRegistro) {
             registro = new Registro();
         } else if (inNome) {
             registro.setNome(str);
         } else if (inEmail) {
             registro.setEmail(str);
         }
     }

    // retorna seus registros lidos
    public Registro[] getRegistros() {
       return (Registro[]) registros.toArray(new
Registro[registros.size()]);
    }

}

2) Agora voc� deve obter um SAXParser e chamar o m�todo parse(), passando a
sua classe Handler e o arquivo XML que voc� deseja ler. Voc� obt�m um
SAXParser de um SAXParserFactory (org.w3c.sax ou algum subpacote - n�o
lembro no momento):

SAXParserFactory spf = SAXParserFactory.getInstance();
SAXParser parser = spf .newSAXParser();
MyEmailHandler handler = new MyEmailHandler();
parser.parse( "seuarquivo.xml", handler );

Agora voc� pode obter seus registros:

Registro[] registros = handler.getRegistros();

E extrair nome e email de cada um:

for (int i = 0; i < registros.length; i++) {
    System.out.println("Registro " + (i + 1));
    System.out.println("Nome: " + registros[i].getNome());
    System.out.println("E-mail: " + registros[i].getEmail());
}

Voc� tamb�m pode usar DOM ou JDOM, mas SAX � melhor para extrair dados
sequencialmente.

[]s

Helder.

--
Helder da Rocha ([EMAIL PROTECTED])
Web Consultant
www.argonavis.com.br
S�o Paulo, Brazil
+55 (11) 3044 4398
+55 (11) 9291 0567
_____________________________________________
Aumente sua produtividade e a qualidade do seu software!
- Aprenda a usar Ant, JUnit, HttpUnit, XDoclet e Cactus  -
Informa��es: www.argonavis.com.br/cursos/java/j820/
_____________________________________________

>
> e se tivesse varios nomes e e-mail como faria, Alguem pode me
> ajudar?
>
> Obrigado
>
> Marcelo
>




------------------------------ LISTA SOUJAVA ---------------------------- 
http://www.soujava.org.br  -  Sociedade de Usu�rios Java da Sucesu-SP 
d�vidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
historico: http://www.mail-archive.com/java-list%40soujava.org.br
para sair da lista: envie email para [EMAIL PROTECTED] 
-------------------------------------------------------------------------

Responder a