[RESOLVIDO]Ler campos de XML

Ola como faço para separar apenas alguns campos que me interessam em um Xml e jogar em uma string por exemplo, tenho a seguinte consulta:

http://maps.googleapis.com/maps/api/geocode/xml?address=jango vidal,cruz alta,RS&sensor=true

como faço para separar apenas a latitude e longitude?

Abraço.

opa blz amaica?

se vc tiver o xsd do xml pode pedir pro jaxb gerar as classes pra você como descrito aqui: http://blog.caelum.com.br/jaxb-xml-e-java-de-maos-dadas/

e depois pegar os valores através de objetos.

Agora caso queira apenas alguns campos pode criar uma classe manualmente que corresponde ao xml e usar xstream pra deserializar o xml. Que é bem fácil tb.

em ultimo caso, pode pegar o xml e usar algo como expressão regular pra pegar o valor (não faria assim ehehehe)

abrassss

Você vai precisar ler esse XML e fazer o parser dele. Tenho 4 tutoriais sobre XML para te apresentar:
Manipulando Arquivo XML ? Parte I: API Nativa
Manipulando Arquivo XML ? Parte II: JDOM
Manipulando Arquivo XML ? Parte III: XStream
XML ? Trabalhando com JAXB

Obrigado a todos, estou tentanado da seguinte maneira:

try {
URL url = new URL(“http://maps.googleapis.com/maps/api/geocode/xml?address=jango vidal,cruz alta,RS&sensor=true”);

		Document document = getDocumento(url);

		Element root = document.getRootElement();

		for (Iterator i = root.elementIterator(); i.hasNext();) {
			Element element = (Element) i.next();

			if (element.getQualifiedName().equals("northeast"))
				
                            System.out.println(element.getText());
                    }           
   
     
    
  } catch (Exception e) {
      e.printStackTrace();
    }
}

eu havia tentado com o web service dos correios da mesma maneira acima e com a url: URL url = new URL(“http://cep.republicavirtual.com.br/web_cep.php?cep=98025330&formato=xml”);

e mandei ele imprimir a “Uf” :
“if (element.getQualifiedName().equals(“uf”))”
ele imprimiu corretamente a consulta, então não sei o que tem errado com o meu metodo

Valeu a força.

Coloquei a Url do google e retornou um xml bem grande e 4 referencias northeast.

Oque vc imprime na tela seria isto?
-28.6315986
-53.5968704
-28.6315986
-53.5968704
-28.6315986
-53.5968704
-28.6315986
-53.5968704

Use XPath, vai ser muito mais fácil, na minha opinião.

Pra imprimir todas as ocorrências da tag por exemplo a expressão XPath seria a seguinte:

//lat/text()

[quote=antherosilva]Coloquei a Url do google e retornou um xml bem grande e 4 referencias northeast.

Oque vc imprime na tela seria isto?
-28.6315986
-53.5968704
-28.6315986
-53.5968704
-28.6315986
-53.5968704
-28.6315986
-53.5968704[/quote]

Opa, no meu caso quando mando rodar o metodo, ele não imprime nada.

[code]public class Main{

public static void main(String[] args) throws Exception{
	
	String expressao = "//lat/text()";
	String xml = "seuArquivoXml.xml";
	
	XPath xPath = XPathFactory.newInstance().newXPath();
	InputStream streamCatalogo = ExecutorXPath.class.getResourceAsStream(xml);
	Transformer transformer = TransformerFactory.newInstance().newTransformer();
	StreamSource source = new StreamSource(streamCatalogo);
	DOMResult result = new DOMResult();
	transformer.transform(source, result);
	Node document = result.getNode();
	
	
	NodeList nodeList = (NodeList) xPath.evaluate(expressao, document, XPathConstants.NODESET);
	
	for(int i = 0 ; i < nodeList.getLength() ; i++){
		Node node = nodeList.item(i);
		System.out.println("Lat " + (i + 1) + ": " + node.getNodeValue());
	}
}

}[/code]Aqui o resultado foi:Lat 1: -28.6331481 Lat 2: -28.6344931 Lat 3: -28.6317951 Lat 4: -28.6331771 Lat 5: -28.6331111 Lat 6: -28.6329291 Lat 7: -28.6342966 Lat 8: -28.6315986 Lat 9: -28.6331111 Lat 10: -28.6327841

Debuga e veja o tamanha de document

[quote=Rodrigo Sasaki][code]public class Main{

public static void main(String[] args) throws Exception{
	
	String expressao = "//lat/text()";
	String xml = "seuArquivoXml.xml";
	
	XPath xPath = XPathFactory.newInstance().newXPath();
	InputStream streamCatalogo = ExecutorXPath.class.getResourceAsStream(xml);
	Transformer transformer = TransformerFactory.newInstance().newTransformer();
	StreamSource source = new StreamSource(streamCatalogo);
	DOMResult result = new DOMResult();
	transformer.transform(source, result);
	Node document = result.getNode();
	
	
	NodeList nodeList = (NodeList) xPath.evaluate(expressao, document, XPathConstants.NODESET);
	
	for(int i = 0 ; i < nodeList.getLength() ; i++){
		Node node = nodeList.item(i);
		System.out.println("Lat " + (i + 1) + ": " + node.getNodeValue());
	}
}

}[/code]Aqui o resultado foi:Lat 1: -28.6331481 Lat 2: -28.6344931 Lat 3: -28.6317951 Lat 4: -28.6331771 Lat 5: -28.6331111 Lat 6: -28.6329291 Lat 7: -28.6342966 Lat 8: -28.6315986 Lat 9: -28.6331111 Lat 10: -28.6327841[/quote]

OLa!!! Assim deu certo as como faço para buscar além da expressão “lat” a espressão “lng”

Bom, como você não definiu qual quer, até que fica fácil… se quer todos e e sempre vem em pares, é só utilizar a seguinte expressão XPath:String expressao = "//lat/..";

Isso Mesmo resolvido, obrigado pessoa!!