2010-05-12 12 views
5

Bu kodu XML'yi ayrıştırmayı başaracak şekilde ayarlamama yardımcı olabilir misiniz? Ben XML ad alanını damla halinde çalışır:XML'de XPath ve ad alanları ile XML Ayrıştırma

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"); 

cevap

9
  1. Sen XPath, e bir önek kullanmalıdır. g: "/ my: foo/my: bar" İstediğiniz herhangi bir öneki seçebilirsiniz - XML ​​dosyasında kullandığınız veya kullanmadığınız öneklerle ilgisi yoktur - ancak birini seçmelisiniz. Bu bir XPath 1.0 sınırlamasıdır.

  2. Sen "benim" dan "http://foo.bar/boo" (değil "http://www.w3.org/2001/XMLSchema-instance") elde

+0

Teşekkür önek eşleştirmesi gerçekleştirmelisiniz, bir cazibe gibi çalışır. – ripper234