如何使用 JXpath 库评估 xpath 表达式

Sha*_*mik 0 java xpath jxpath

我正在使用 apache JXPath 库来解析 XML。我试图在 JXPath 中找到一个 API,它的功能与 XPath 评估类似,即检查 xpath 表达式是否存在?它的相似之处在于

<xsl:when test="
Run Code Online (Sandbox Code Playgroud)

使用 xslt 时。使用 XPath 我可以类似地做

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

如果解决方案不存在,那么它会将状态返回为空。现在,在使用 JXPath 时,我无法在类似的行中找出 API。这是我的示例代码

DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();

DocumentBuilder bld = dbfactory.newDocumentBuilder();

文档 metaDoc = bld.parse(in);

JXPathContext metaCtx = JXPathContext.newContext(metaDoc);

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

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

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

谢谢

Eur*_*fer 5

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

JXPathContext context = JXPathContext.newContext(myDoc);
context.setLenient(true);
Run Code Online (Sandbox Code Playgroud)

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