如何使用JXpath库计算xpath表达式



我使用apache JXPath库来解析XML。我试图在JXPath中找到一个API,它的功能与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);

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

DocumentBuilderFactory = DocumentBuilderFactory. newinstance ();

DocumentBuilder bld = dbfactory.newDocumentBuilder();

Document metaDoc = bld.parse(in);

JXPathContext metaCtx = JXPathContext. newcontext (metaDoc);

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

抛出"JXPathNotFoundException: No value for xpath"。对于实现特定的逻辑,如果表达式不返回数据/不存在,我需要放置和if-else块。

任何关于这方面的指导都将非常感谢。

谢谢

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

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

宽大模式context.getValue(xpath)方法抛出一个异常所提供的xpath不映射到现有属性。这可以通过调用context.setLenient(true)来放松约束。在宽大模式下,如果路径映射到,则方法仅返回null没有。

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

最新更新