----- 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]
-------------------------------------------------------------------------