我使用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