使用Java中的XPath和命名空间解析XML

你能帮助我调整这段代码,以便它能够解析XML吗? 如果我删除XML命名空间它的工作原理:

String webXmlContent = "\n" + "baz"; DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); domFactory.setNamespaceAware(true); DocumentBuilder builder = domFactory.newDocumentBuilder(); org.w3c.dom.Document doc = builder.parse(new StringInputStream(webXmlContent)); NamespaceContextImpl namespaceContext = new NamespaceContextImpl(); namespaceContext.startPrefixMapping("foo", "http://www.w3.org/2001/XMLSchema-instance"); XPath xpath = XPathFactory.newInstance().newXPath(); xpath.setNamespaceContext(namespaceContext); XPathExpression expr = xpath.compile("/foo/bar"); Object result = expr.evaluate(doc, XPathConstants.NODESET); NodeList nodes = (NodeList) result; System.out.println("Got " + nodes.getLength() + " nodes"); 

  1. 您必须在XPath中使用前缀,例如:“/ my:foo / my:bar”您可以选择任何您喜欢的前缀 – 它与您在XML中使用或不使用的前缀没有任何关系文件 – 但你必须选择一个。 这是XPath 1.0的限制。

  2. 您必须执行从“my”到“ http://foo.bar/boo ”的前缀映射(而不是“ http://www.w3.org/2001/XMLSchema-instance ”)