2010-05-12 33 views
5

Bạn có thể giúp tôi điều chỉnh mã này để nó quản lý phân tích cú pháp XML không? Nếu tôi thả không gian tên XML hoạt động:Phân tích cú pháp XML với XPath & không gian tên trong 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"); 

Trả lời

9
  1. Bạn phải sử dụng một tiền tố trong XPath của bạn, e. g .: "/ my: foo/my: bar" Bạn có thể chọn bất kỳ tiền tố nào bạn thích - nó không liên quan gì đến tiền tố bạn sử dụng hoặc không sử dụng trong tệp XML - nhưng bạn phải chọn một. Đây là một hạn chế của XPath 1.0.

  2. Bạn phải thực hiện lập bản đồ prefix từ "tôi" thành "http://foo.bar/boo" (không phải "http://www.w3.org/2001/XMLSchema-instance")

+0

Cảm ơn, hoạt động như một nét duyên dáng. – ripper234

Các vấn đề liên quan