使用XPath解析XML并在Java中使用命名空间
问题描述:
您能否帮助我调整此代码,以便管理解析XML?如果我把XML命名空间它的工作原理:使用XPath解析XML并在Java中使用命名空间
String webXmlContent = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<foo xmlns=\"http://foo.bar/boo\"><bar>baz</bar></foo>";
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");
答
必须在您的XPath,E使用前缀。 g .:“/ my:foo/my:bar”你可以选择任何你喜欢的前缀 - 它与你使用的或不在XML文件中使用的前缀无关 - 但你必须选择一个。这是XPath 1.0的限制。
必须从 “我” 到 “http://foo.bar/boo”(不是 “http://www.w3.org/2001/XMLSchema-instance”)执行前缀映射
谢谢,工程就像一个魅力。 – ripper234 2010-05-12 13:17:53