如何在java中使用XPath解析此xml?

问题描述:

<?xml version="1.0" encoding="utf-8"?> <double xmlns="http://www.somewebsite.com/">2.0</double>如何在java中使用XPath解析此xml?

我在解析XPath 1.0时遇到了一些麻烦。

这是我做的:

XPath xpath = XPath.newInstance("/double"); Element returnElement = (Element) xpath.selectSingleNode(doc);

返回元素为null,但它应该是2.0。

注意:应该使用XPath 1.0

+0

正确的Xpath“/ double/text()”http://*.com/questions/5033955/xpath-select-text-node – user1516873 2013-03-22 08:49:03

+0

@ user1516873:试过了。没有工作。在这里找到答案:[链接](http://*.com/a/15240082/841804)。它应该是“// * [local-name()='double']” – Chanthu 2013-03-22 08:58:10

double该元件处于http://www.somewebsite.com/命名空间。将名称空间映射到前缀(例如foo)并使用限定的表达式(例如/foo:double)解析。

使用标准的API:

String xml = "<double xmlns='http://www.somewebsite.com/'>2.0</double>"; 
Reader reader = new StringReader(xml); 
XPath xpath = XPathFactory.newInstance() 
          .newXPath(); 
NamespaceContext context = new NamespaceContextMap("foo", "http://www.somewebsite.com/"); 
xpath.setNamespaceContext(context); 
String value = xpath.evaluate("/foo:double", new InputSource(reader)); 
System.out.println(value); 

你可以找到NamespaceContextmy blog一个样本实现。