我相信它在不久前工作但现在xpath返回null。有人可以帮我找到代码中的愚蠢错误吗? 或者我甚至必须在setNamespaceAware(false)之后提供NamespaceContext?
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(false);
domFactory.setIgnoringComments(true);
domFactory.setIgnoringElementContentWhitespace(true);
try {
Document doc = domFactory.newDocumentBuilder().parse(new File("E:/Temp/test.xml"));
XPath xp = XPathFactory.newInstance().newXPath();
NodeList nl = (NodeList) xp.evaluate("//class", doc, XPathConstants.NODESET);
System.out.println(nl.getLength());
}catch (Exception e){
e.printStackTrace();
}
XML文档在这里:
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="http://www.example.com/schema">
<class />
<class />
</root>
答案 0 :(得分:5)
显然有三种选择。从我的角度来看,最简单的顺序是:
"//class"
更改为"//*[local-name() = 'class']"
。它有点kludgy但它会忽略名称空间。如果这仍然给你零,你知道问题不是命名空间。"//foo:class"