Как оценить выражение xpath с помощью библиотеки JXpath - PullRequest
0 голосов
/ 12 октября 2011

Я использую библиотеку apache JXPath для анализа XML. Я пытаюсь найти API в JXPath, который выполняет функцию, аналогичную оценке XPath, то есть проверяет, существует ли выражение xpath? Это похоже на линии

<xsl:when test="

при использовании xslt. Используя XPath я могу аналогичным образом сделать

XPathFactory xpathFactory = XPathFactory.newInstance();
XPath xpath = xpathFactory.newXPath();
InputSource source = new InputSource(new StringReader(xml));
status = xpath.evaluate("/resp/status/solution", source);

Если решение отсутствует, оно вернет статус как ноль. Теперь, используя JXPath, я не могу изобразить API в похожих строках. Вот мой пример кода

DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance ();

DocumentBuilder bld = dbfactory.newDocumentBuilder ();

Документ metaDoc = bld.parse (in);

JXPathContext metaCtx = JXPathContext.newContext (metaDoc);

Узел узла = (Узел) metaCtx.selectSingleNode ("/ resp / status / solution");

Это выдает «JXPathNotFoundException: Нет значения для xpath». Для реализации конкретной логики мне нужно поставить и блок if-else, если выражение не возвращает данные / не существует.

Любой указатель на это будет высоко оценен.

Спасибо

Ответы [ 2 ]

4 голосов
/ 09 января 2012

Вы можете предотвратить JXPathNotFoundException, установив контекст на Lenient:

JXPathContext context = JXPathContext.newContext(myDoc);
context.setLenient(true);

Lenient Mode Метод context.getValue (xpath) выдает исключение, если предоставленный xpath не сопоставляется с существующим свойством. это ограничение можно ослабить, вызвав context.setLenient (true). в В мягком режиме метод просто возвращает ноль, если путь отображается на нет ничего.

2 голосов
/ 12 октября 2011

Попробуйте использовать JXPathContext.iterate () . Он возвращает пустой итератор (hasNext () возвращает false), когда нет подходящих узлов. Если у него есть хотя бы один соответствующий узел, вызовите next () и верните это значение. В противном случае верните ноль.

...