0

我正在使用 apache JXPath 库来解析 XML。我试图在 JXPath 中找到一个与 XPath 评估类似的功能的 API,即检查 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);

节点节点 = (Node)metaCtx.selectSingleNode("/resp/status/solution");

这会引发“JXPathNotFoundException:xpath 没有值”。对于实现特定的逻辑,如果表达式不返回数据/不存在,我需要放置 if-else 块。

对此的任何指针将不胜感激。

谢谢

4

2 回答 2

5

您可以JXPathNotFoundException通过将上下文设置为Lenient

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

宽松模式 如果提供的 xpath 未映射到现有属性,则 context.getValue(xpath) 方法将引发异常。这个约束可以通过调用 context.setLenient(true) 来放松。在宽松模式下,如果路径映射为空,则该方法仅返回 null。

于 2012-01-09T19:54:16.353 回答
2

尝试使用JXPathContext.iterate()。当没有匹配的节点时,它返回一个空的迭代器(hasNext() 返回 false)。如果它至少有一个匹配节点,则调用 next() 并返回该值。否则返回null。

于 2011-10-12T00:02:32.520 回答