首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用JXpath库计算xpath表达式

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

Stack Overflow用户
提问于 2011-10-12 06:23:26
回答 2查看 3.4K关注 0票数 0

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

代码语言:javascript
复制
<xsl:when test="

在使用xslt时。使用XPath我也可以做类似的事情

代码语言:javascript
复制
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块。

任何关于这一点的指针都将受到高度赞赏。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-12 08:02:33

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

票数 2
EN

Stack Overflow用户

发布于 2012-01-10 03:54:16

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

代码语言:javascript
复制
JXPathContext context = JXPathContext.newContext(myDoc);
context.setLenient(true);

xpath Lenient Mode如果提供的

没有映射到现有属性,context.getValue(xpath)方法将抛出异常。这个约束可以通过调用context.setLenient(true)来放松。在lenient模式下,如果路径映射为nothing,则该方法仅返回null。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7733249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档