2009-12-31 8 views
2

От JavaDoc: возвращает: Строка, которая является результатом вычисления выражения и преобразования результата в строку.String javax.xml.xpath.XPathExpression.evaluate (объект объекта) гарантирует, что он никогда не возвращает значение null во всех реализациях?

/** 
* ... 
* ... 
* @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) 

Вопрос в том, что это немного вагу, что такое контракт здесь, если выражение ничего не находит. Является ли null действительным/недействительным возвратом во всех реализациях? где определяется API возврата? в JSR?

ответ

3

Если я правильно помню, в XPath нет такой вещи, как null. Я предполагаю, что он вернет пустую строку.

Обновление: Быстрый просмотр XPath 2.0 и XPath 2.0 Functions Спецификации подтверждают это чувство.

+0

имеет смысл, но это документально где-то? есть ли официальное руководство для разработчиков этого API, чтобы избежать возврата null? и есть ли ссылка на него? И если да, то как бы отличаться «ваш xpath нашел узел, и он содержал значение« пустая строка »на« ваш xpath ничего не нашел »? (Я предполагаю, что для этого у вас есть оценка, возвращающая объект) –

+0

Если вы ничего не нашли, XPath возвращает пустую последовательность, которая преобразуется в пустую строку (http://www.w3.org/TR/xquery-operator/# func-string) – Jerome

+0

javax.xml.xpath.XPathExpression.evaluate (объект объекта, QName returnType) возвращает значение null, если оно ничего не обнаруживает –

1

Это может быть не ожидаемый ответ.

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

Допустим, вы написали метод находит @id по href.

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

Этот метод возвращает 0 не null для bbb в HREF

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

мне пришлось изменить как этот

Double findIdByHref(final String href) { 
    final Node node = evaluate("/:types/:type[:href='bbb']", NODE); 
    if (node == null) { 
     return null; 
    } 
    return evaluate("@id", node); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^