;

Full width home advertisement

Tutoriales

Programación

Post Page Advertisement [Top]




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

Bottom Ad [Post Page]

| Designed by Colorlib