String javax.xml.xpath.xpathexpression.evaluate (elemento de objeto) garantiza que nunca devuelve nulo en todas las implementaciones?
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?
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);
}