Parsing XML com DOM

5 respostas
R

Amigos,

supondo o seguinte XML,q será parseado com DOM:

<raiz>
  <nó value="xxxxx"></nó>
<raiz>

preciso pegar o valor do atributo de nó,algo do tipo:

NodeList nodeUser = elemUser.getElementsByTagName("nó");
 NamedNodeMap  mapUser = elemUser.getAttributes();
  Node nd = mapUser.getNamedItem("value");
  String  username=nd.getNodeValue();

Pelo q li, eh esse o caminho,mas nao está funcionando…Alguem ja passou por isso?

Grato

5 Respostas

A

Cara… eu utilizei o document do dom… e passei uma expressão Xpath que seria no teu caso algo assim

String retorno = RetornaStringPorCaminho("/raiz/nó/@value");


public String RetornaStringPorCaminho (String caminhoNodo) throws Exception
	{
		return (String) xpath.evaluate(caminhoNodo, doc, XPathConstants.STRING);
	}

Será que isso te ajuda??? Eu fiz isso há tanto tempo… se precisar dou uma buscada mais atenciosa…

Posta aí, precisando.

R

Adriano,

onde está instanciacao da sua variavel xpath ???

Grato

A

foi mal cara… deixa eu postar a classe inteira ok???

Desculpa a desatenção… mas postei com pressa o último…

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;

public class LeitorXml 
{
	private Document doc;
	private DocumentBuilder parser; 
	private XPath xpath;
	
	public LeitorXml (String caminhoArquivoXML)  throws Exception
	{		
		parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
		//doc = parser.parse(new File("C:/Ataves-local/EcWkspace/XmlExtract/Arquivo.xml"));
		doc = parser.parse(new File(caminhoArquivoXML));
		xpath = XPathFactory.newInstance().newXPath();
	}
	
	public String RetornaStringPorCaminho (String caminhoNodo) throws Exception
	{
		return (String) xpath.evaluate(caminhoNodo, doc, XPathConstants.STRING);
	}
}

Beleza… tá aí a classe onde o parser é insanciado pelo caminho do arquivo que se deseja ler…

Bom, sobre o xpath, ele aceita expressões de caminho…

Deixa eu fazer umas alteraçõezinhas em seu XML, ficando assim

<raiz>
   <nó value="xxxxx"></nó>
   <outro no> Valor qualquer </outro no>
 <raiz>

Beleza, com essa classe que postei e o método RetornaStringporCaminho você consegue percorrer o XML e retornar os dados desejados.

Passando como parâmetro para o método RetornaStringPorCaminho, a seguinte String : “/raiz/nó/@value”, o retorno será “xxxxx”

Se você passar “/raiz/outro no”, o retorno será “Valor qualquer”.

Entendeu? Acho que me atrapalhei pra explicar né?

www.w3schools.com tem detalhes completos da sintaxe do Xpath…

Tomara que te ajude… precisando… posta aí…

T

XPath é legal porque:

  • É bem intuitivo
  • Costuma ser mais eficiente que percorrer a árvore “no braço”
  • Esse método “getElementsByTagName” é um lixo. Normalmente ele pega coisa demais, e você tem de ficar percorrendo a árvore até chegar a um ponto razoável.
A

E aí cara?

Conseguiu extrair os dados do XML? Funcionou?

Abraço…

Criado 9 de maio de 2006
Ultima resposta 10 de mai. de 2006
Respostas 5
Participantes 3