¿Qué hace exactamente el método evaluate?

2087 vistas

Ya sea en la clase XPath o en la XPathExpression, el método evaluate() tiene cuatro variantes. Para todos estos métodos, el parámetro de tipo String llamado expression corresponde a la expresión XPath a evaluar.

[table]
  [tr]
    [tdc]Parámetros[/tdc]
    [tdc]Retorna[/tdc]
    [tdc]Descripción[/tdc]
  [/tr]
  [tr]
    [tdc]String expression, Object item, QName returnType[/tdc]
    [tdc]Object[/tdc]
    [tdl]El parámetro item es el elemento XML a evaluar. Puede ser un Document, un DocumentFragment, un Node o una NodeList (package org.w3c.dom). El parámetro returnType tiene que ser una de las constantes de la clase XPathConstants: NUMBER, STRING, BOOLEAN, NODE o NODESET (sino se elevará una IllegalArgumentException). Este parámetro simplemente define el tipo del Object devuelto por el método.[/tdl]
  [/tr]
  [tr]
    [tdc]String expression, Object item[/tdc]
    [tdc]String[/tdc]
    [tdl]Este método tiene el mismo comportamiento que evaluate(expression, item, returnType) con returnType de tipo XPathConstants.STRING.[/tdl]
  [/tr]
  [tr]
    [tdc]String expression, InputSource source, QName returnType[/tdc]
    [tdc]Object[/tdc]
    [tdl]El parámetro source es el source XML a evaluar. Esta tiene que ser una InputSource (package org.xml.sax). El parámetro returnType tiene que ser una de las constantes de la clase XPathConstants: NUMBER, STRING, BOOLEAN, NODE o NODESET (sino se elevará una IllegalArgumentException). Este parámetro define el tipo del Object devuelto por el método.[/tdl]
  [/tr]
  [tr]
    [tdc]String expression, InputSource source[/tdc]
    [tdc]String[/tdc]
    [tdl]Este método tiene el mismo comportamiento que evaluate(expression, source, returnType) con returnType de tipo XPathConstants.STRING.[/tdl]
  [/tr]
[/table]

Los tipos de retorno corresponden a la especificación XPath 1.0: http://www.w3.org/TR/xpath. Veamos las correspondencias entre las constantes de XPathConstants (instancias de QName) y los tipos devueltos por evaluate:

[table]
  [tr]
    [tdc]QName[/tdc]
    [tdc]Tipo devuelto[/tdc]
    [tdc]Descripción[/tdc]
  [/tr]
  [tr]
    [tdc]XPathConstants.NODE[/tdc]
    [tdc]org.w3c.dom.Node[/tdc]
    [tdl]Cuando se requiere un Node como tipo devuelto, el método evaluate() devuelve una instancia de org.w3c.Node correspondiente al primer nodo que satisfazca la expresión XPath.[/tdl]
  [/tr]
  [tr]
    [tdc]XPathConstants.NODESET[/tdc]
    [tdc]org.w3c.dom.NodeList[/tdc]
    [tdl]Cuando se requiere un NodeSet como tipo devuelto, el método evaluate() devuelve una instancia de org.w3c.NodeList correspondiente a los nodos seleccionados por la expresión XPath.[/tdl]
  [/tr]
  [tr]
    [tdc]XPathConstants.STRING[/tdc]
    [tdc]java.lang.String[/tdc]
    [tdl]Cuando se requiere un String como tipo devuelto, el método evaluate() devuelve el contenido del o de los nodos que satisfacen la expresión XPath (hijos incluidos).[/tdl]
  [/tr]
  [tr]
    [tdc]XPathConstants.BOOLEAN[/tdc]
    [tdc]java.lang.Boolean[/tdc]
    [tdl]Cuando se requiere un Boolean como tipo devuelto, el método evaluate() devuelve un Boolean.TRUE si como mÃnimo un nodo cumple la condición de la expresión XPath. Sino, devolverá Boolean.FALSE.[/tdl]
  [/tr]
  [tr]
    [tdc]XPathConstants.NUMBER[/tdc]
    [tdc]java.lang.Double[/tdc]
    [tdl]Cuando se requiere un Number como tipo devuelto, el método evaluate() intenta transformar el contenido del nodo seleccionado en Double.[/tdl]
  [/tr]
[/table]

Para ver algún ejemplo práctico de uso de estos métodos, ver los enlaces propuestos.