[RESOLVIDO]Ler campos de XML

11 respostas
A

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.

11 Respostas

R

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

R

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

A

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.

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

R

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()

A

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

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

R
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());
		}
	}

}
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
A

Debuga e veja o tamanha de document

A
Rodrigo Sasaki:
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());
		}
	}

}
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

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

R

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/..";

A

Isso Mesmo resolvido, obrigado pessoa!!

Criado 22 de março de 2013
Ultima resposta 26 de mar. de 2013
Respostas 11
Participantes 5