En este post se hara otro ejemplo de manejar XML usando Xpath.
Xpath es el diminutivo de XML Path Language, es un lenguaje diseñado para la busqueda y recorrido de nodos desde un documento de XML.
Usando Xpath.
<?xml version="1.0" encoding="UTF-8"?>
<gente>
<persona>
<nombre>Maria</nombre>
<apellido>Josefina</apellido>
<ciudad>Merida</ciudad>
</persona>
<persona>
<nombre>Silvia</nombre>
<apellido>Perez</apellido>
<ciudad>Valera</ciudad>
</persona>
<persona>
<nombre>Roxana</nombre>
<apellido>Materano</apellido>
<ciudad>Las vegas</ciudad>
</persona>
<persona>
<nombre>Jhosmary</nombre>
<apellido>Alarcon</apellido>
<ciudad>Ermita</ciudad>
</persona>
<persona>
<nombre>Angelica</nombre>
<apellido>Rueba</apellido>
<ciudad>Santa Teresas</ciudad>
</persona>
</gente>
Luego usaremos la siguiente clase como prototipo para leer y hacer consultas
package xmlxpath;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class consultaXML {
public void query() throws ParserConfigurationException, SAXException,IOException, XPathExpressionException {
// Codigo basico para leer XML
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder;
Document doc = null;
XPathExpression expr = null;
builder = factory.newDocumentBuilder();
doc = builder.parse("usandoxpath.xml");
//Creando un objeto de tipo XPathFactory
XPathFactory xFactory = XPathFactory.newInstance();
//Creando un objeto de tipo Xpath
XPath xpath = xFactory.newXPath();
//Compilando la expresion con Xpath
expr = xpath.compile("//persona[nombre='Silvia']/apellido/text()");
// Se corre la consulta a partir del DOM
Object result = expr.evaluate(doc, XPathConstants.NODESET);
// El resultado se envia aun NodeList a partir del DOM (Document Object Model)
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println(nodes.item(i).getNodeValue());
}
// compilamos de nuevo XPath para conseguir el numero de personas con el nombre de Silvia
expr = xpath.compile("count(//persona[nombre='Silvia'])");
// Se corre la consulta para obtener el numero de correspondencias.
Double number = (Double) expr.evaluate(doc, XPathConstants.NUMBER);
System.out.println("Numero de objetos " + number);
// Aqui preguntamos si tenemos mas de 2 personas con el nombre de Silvia
expr = xpath.compile("count(//persona[nombre='Silvia']) >2");
// Se corre la consulta a partir del DOM
Boolean check = (Boolean) expr.evaluate(doc, XPathConstants.BOOLEAN);
System.out.println(check);
}
}
Y para probar el código ejecutamos tal cual se vera a continuación:package xmlxpath;
import java.io.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class XmlXPATH {
public static void main(String[] args) throws XPathExpressionException, ParserConfigurationException, SAXException, IOException {
consultaXML procesos = new consultaXML();
procesos.query();
}
}
Este es un ejemplo sencillo espero que les haya sido de utilidad.
Codigo Fuente (Descarga)



No hay comentarios:
Publicar un comentario