首页 文章

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

提问于
浏览
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);

如果解决方案不存在,那么它将返回状态为null . 现在,在使用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没有值” . 对于特定于实现的逻辑,如果表达式没有返回数据/不存在,我需要put和if-else阻塞 .

任何指针都将受到高度赞赏 .

谢谢

2 回答

  • 4

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

  • 1

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

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

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

相关问题