2010-05-12 171 views
5

您能否幫助我調整此代碼,以便管理解析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"); 

回答

9
  1. 必須在您的XPath,E使用前綴。 g .:「/ my:foo/my:bar」你可以選擇任何你喜歡的前綴 - 它與你使用的或不在XML文件中使用的前綴無關 - 但你必須選擇一個。這是XPath 1.0的限制。

  2. 必須從 「我」 到 「http://foo.bar/boo」(不是 「http://www.w3.org/2001/XMLSchema-instance」)執行前綴映射

+0

謝謝,工程就像一個魅力。 – ripper234 2010-05-12 13:17:53