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