Recuperar dados do xml

Bom Dia.

Estou com uma dúvida e não estou conseguindo fazer o que preciso.

É o seguinte, tenho um xml com as seguintes informações:

  <?xml version="1.0" encoding="iso-8859-1" ?> 
- <registros>
- <registro id="1">
  <dados Nome="Pedro" Senha="1" Deficiencia="Auditiva" foto="c:/foto.jpg" /> 
  </registro>
  </registros>

Preciso recuperar o Nome, a Senha, a Deficiencia e o Caminho da Foto, mas não estou conseguindo usando o Parser. Tem alguma forma sem usar o Parser? Alguém poderia me ajudar???

Desde já agradeço

Sim, da uma olhada neste post http://www.guj.com.br/java/287560-como-criar-um-xml-usando-sax#1520238, eu coloquei lá 4 links sobre parser em XML.

De repente, você também pode dar uma olhadinha em XPath. Dê uma olhada nesse código:

String xml = "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?> " + 
					"<registros>" +
					"<registro id=\"1\">" +
					"<dados Nome=\"Pedro\" Senha=\"1\" Deficiencia=\"Auditiva\" foto=\"c:/foto.jpg\" /> " +
					"</registro>" +
					"</registros>";
		
		XPath xpath = XPathFactory.newInstance().newXPath();
		
		String nome = (String) xpath.evaluate("//*[local-name() = 'dados']/@Nome", new InputSource(new StringReader(xml)), XPathConstants.STRING);

		System.out.println(nome);

Lógico, você teria que flexibilizar esse código de acordo com as suas necessidades, testar bem, etc. Mas acredito ser muito mais fácil de usar do que um parser SAX ou coisa do tipo.

[]'s

Muito obrigado pelas respostas, estou analisando todas as alternativas.

Uma Boa Tarde à todos…

Cara…

Nos projetos que preciso parsear XML eu tenho usado o XSTREAM (http://xstream.codehaus.org)
A documentação é muito boa e a utilização melhor ainda … muito simples.

Da uma olhadinha… eu aconselho.

** com este tutorial (http://xstream.codehaus.org/tutorial.html) da pra ter uma idéia de como funciona…

Mas afinal, a idéia é mesmo fazer parse do XML? Pergunto porque, de repente, esse XML vai conter centenas, milhares de registros e fazer parse, pura e simplesmente, vai acabar derrubando a sua JVM por falta de memória. Pode até ficar mais fácil de fazer isso usando JAXB, XStream ou o que seja, mas não existe milagre em termos de memória. Qual é o caso?

[]'s

Entao caro Alexandre, é uma coisa bem simples. É que sou um iniciante ainda em Java. O XML já é gerado por outro programa é só isso mesmo, vai ter só um nome, senha, deficiencia e um caminho para foto, apenas 1 registro. Só quero recuperar esses dados e salvar em uma variável.

Obrigado mais uma vez pela atenção.

Cara… da uma olhadinha no XSTREAM.
Pra vc acho que vai ser um bom negocio.

ex:

Gerando XML:

[code]public class Person {
private String firstname;
private String lastname;
private PhoneNumber phone;
private PhoneNumber fax;
// … constructors and methods
}

public class PhoneNumber {
private int code;
private String number;
// … constructors and methods
}[/code]

[code]Person joe = new Person(“Joe”, “Walnes”);
joe.setPhone(new PhoneNumber(123, “1234-456”));
joe.setFax(new PhoneNumber(123, “9999-999”));

XStream xstream = new XStream();
xstream.alias(“person”, Person.class);
xstream.alias(“phonenumber”, PhoneNumber.class);

String xml = xstream.toXML(joe);[/code]

<person> <firstname>Joe</firstname> <lastname>Walnes</lastname> <phone> <code>123</code> <number>1234-456</number> </phone> <fax> <code>123</code> <number>9999-999</number> </fax> </person>

Parseando XML:

Person newJoe = (Person)xstream.fromXML(xml);

Simples como a vida deve ser !!!

Neste caso, dê uma olhada no JAXB, que é a engine padrão de mapeamento de XML para Objetos em Java. Seu código ficaria assim:

String xml = "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?> " + 
					"<registros>" +
					"<registro id=\"1\">" +
					"<dados Nome=\"Pedro\" Senha=\"1\" Deficiencia=\"Auditiva\" foto=\"c:/foto.jpg\" /> " +
					"</registro>" +
					"<registro id=\"2\">" +
					"<dados Nome=\"João\" Senha=\"1\" Deficiencia=\"Auditiva\" foto=\"c:/foto.jpg\" /> " +
					"</registro>" +
					"</registros>";
		
		JAXBContext context = JAXBContext.newInstance(Registros.class);
		Registros registros = (Registros)context.createUnmarshaller().unmarshal(new StringReader(xml));
		
		System.out.println(registros);
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Registros {

	@XmlElement(name="registro")
	private Collection<Registro> registros;
	
	public Collection<Registro> getRegistros() {
		return registros;
	}
}
@XmlAccessorType(XmlAccessType.FIELD)
public class Registro {

	
	@XmlAttribute()
	private Long id;
	
	private Collection<Dados> dados;
	
	
	public Long getId() {
		return id;
	}
	
	public Collection<Dados> getDados() {
		return dados;
	}
	

}
@XmlAccessorType(XmlAccessType.FIELD)
public class Dados {

	@XmlAttribute(name="Nome")
	private String nome;
	
	@XmlAttribute(name="Senha")
	private String senha;
	
	
	@XmlAttribute(name="Deficiencia")
	private TipoDeficiencia deficiencia;
	
	@XmlAttribute
	private String foto;
	
	
	public String getNome() {
		return nome;
	}
	
	public String getSenha() {
		return senha;
	}
	
	public TipoDeficiencia getDeficiencia() {
		return deficiencia;
	}
	
	public String getFoto() {
		return foto;
	}
	
	
	public enum TipoDeficiencia {
		Auditiva;
	}

}

[]'s

Muitoooooooooooooooooooooo Obrigadooooooooooooooooooooooooooooooooo

Vc caiu do céu
rsrsrsrs