XPath使用defaultNamespace为xml返回null

我相信它在不久前工作但现在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文档在这里:

      

有三种选择。 从我的角度来看,最简单的顺序是:

  • 将您的XPath从"//class"更改为"//*[local-name() = 'class']" 。 它有点kludgy但它会忽略名称空间。 如果这仍然给你零,你知道问题不是命名空间。
  • 在Java代码中为“http://www.example.com/schema”注册名称空间前缀,并在XPath表达式中使用它: "//foo:class"
  • 弄清楚你正在使用什么解析器实现以及为什么它与@ Rodney的行为不同,或者改为另一个