String javax.xml.xpath.xpathexpression.evaluate (elemento de objeto) garantiza que nunca devuelve nulo en todas las implementaciones?

StackOverflow https://stackoverflow.com/questions/1985234

  •  22-09-2019
  •  | 
  •  

Pregunta

Desde el Javadoc: Devuelve: la cadena que es el resultado de evaluar la expresión y convertir el resultado en una cadena.

/**
 * ...
 * ...
 * @return The <code>String</code> that is the result of evaluating the expression and converting the result to a 
 *   <code>String</code>.
 * ...
 * ...
 */
String javax.xml.xpath.XPathExpression.evaluate(Object item)

La pregunta es que es un poco de lo que es el contrato aquí en caso de que la expresión no encuentre nada. ¿Es NULL un retorno válido / inválido en todas las implementaciones? ¿Dónde se define la API de retorno? en el JSR?

¿Fue útil?

Solución

Si no recuerdo correctamente, no existe el nulo en XPath. Supongo que devuelve la cadena vacía.

Actualizar: Un vistazo a XPATH 2.0 y Funciones de XPath 2.0 Las especificaciones confirman este sentimiento.

Otros consejos

Esta no podría ser una respuesta esperada.

<types>
    <type id="1">
        <href>aaa</href>
    </type>
</types>

Digamos que escribió un método encuentra @id por href.

Double findIdByHref(final String href) {
    evaluate("/:types/:type[:href='bbb']/@id", NUMBER);
}

Este método regresa 0 no null por bbb como href

final Double id = findByHref("bbb"); // not null

Tuve que modificar así

Double findIdByHref(final String href) {
    final Node node = evaluate("/:types/:type[:href='bbb']", NODE);
    if (node == null) {
        return null;
    }
    return evaluate("@id", node);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top