Parsing XML com DOM

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

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.

Adriano,

onde está instanciacao da sua variavel xpath ???

Grato

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í…

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.

E aí cara?

Conseguiu extrair os dados do XML? Funcionou?

Abraço…