Obtener una XPathExpression

2133 vistas

Veamos dos métodos estáticos que muestran como crear una instancia de XPath y hacerle evaluar una XPathExpression.

Ejemplo con un Document DOM:



java
  1. public static void evaluadorDOM(Document document, String expression, QName devuelto){
  2.   try{
  3.       // creación del XPath
  4.       XPathFactory factory = XPathFactory.newInstance();
  5.       XPath xpath = factory.newXPath();
  6.  
  7.       // evaluación de la expresión XPath
  8.       XPathExpression exp = xpath.compile(expression);
  9.       Object resultado = exp.evaluate(document, devuelto);
  10.       System.out.println(resultado);
  11.   }catch(XPathExpressionException xpee){
  12.       xpee.printStackTrace();
  13.   }
  14. }



Ejemplo con una InputSource SAX:



java
  1. public static void evaluadorSAX(File fichero, String expression, QName devuelto){
  2.   try{
  3.       // creación del source
  4.       InputSource source = new InputSource(new FileInputStream(fichero));
  5.  
  6.       // creación del XPath
  7.       XPathFactory factory = XPathFactory.newInstance();
  8.       XPath xpath = factory.newXPath();
  9.  
  10.       // evaluación de la expresión XPath
  11.       XPathExpression exp = xpath.compile(expression);
  12.       Object resultado = exp.evaluate(source, devuelto);
  13.       System.out.println(resultado);
  14.   }catch(XPathExpressionException xpee){
  15.       xpee.printStackTrace();
  16.   }catch(IOException  ioe){
  17.       ioe.printStackTrace();
  18.   }
  19. }



Información suplementaria:
Podemos ver que no es necesario pasar por una instancia de XPathExpression devido a que la clase XPath dispone de un método evaluate(). AsÃ, podremos reemplazar el código del primer método por:



java
  1.   XPath xpath = XPathFactory.newInstance().newXPath();
  2.   Object resultado = xpath.evaluate(expression,document,devuelto);



Para conocer todos los parámetros y tipos devueltos posibles por el método evaluate() ver: [iurl=90&all=0&fs=926#933]¿Qué hace exactamente el método evaluate?[/iurl]