我正在使用apache库来解析JXPath。我正在尝试在JXPath中找到一个与XPath evaluate类似的功能的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);如果不存在解决方案,那么它会将status返回为null。现在,当我使用JXPath的时候,我不能用类似的方式来理解一个API。下面是我的示例代码
DocumentBuilderFactory数据库工厂= DocumentBuilderFactory.newInstance();
DocumentBuilder bld = dbfactory.newDocumentBuilder();
文档metaDoc = bld.parse(in);
JXPathContext metaCtx = JXPathContext.newContext(metaDoc);
节点= (Node)metaCtx.selectSingleNode("/resp/status/solution");
这将抛出一个"JXPathNotFoundException: No value for xpath“。对于特定于实现的逻辑,如果表达式不返回数据/不存在,则需要放入和if-else块。
任何关于这一点的指针都将受到高度赞赏。
谢谢
发布于 2011-10-12 08:02:33
尝试使用JXPathContext.iterate()。当没有匹配的节点时,它返回一个空的迭代器(hasNext()返回false)。如果它至少有一个匹配节点,则调用next()并返回该值。否则返回null。
发布于 2012-01-10 03:54:16
您可以通过将上下文设置为Lenient来阻止JXPathNotFoundException
JXPathContext context = JXPathContext.newContext(myDoc);
context.setLenient(true);xpath Lenient Mode如果提供的
没有映射到现有属性,context.getValue(xpath)方法将抛出异常。这个约束可以通过调用context.setLenient(true)来放松。在lenient模式下,如果路径映射为nothing,则该方法仅返回null。
https://stackoverflow.com/questions/7733249
复制相似问题