2013-03-22 4 views
0

<?xml version="1.0" encoding="utf-8"?> <double xmlns="http://www.somewebsite.com/">2.0</double>Как разобрать этот xml с помощью XPath в java?

У меня возникли проблемы с разбором, используя XPath 1.0.

это то, что я делаю:

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

обратный элемент является пустым, но он должен быть 2,0.

Примечание: Следует использовать XPath 1.0

+0

правильный Xpath "/ double/text()" http://stackoverflow.com/questions/5033955/xpath-select-text-node – user1516873

+0

@ user1516873: Пробовал это. не работает. Нашел ответ здесь: [link] (http://stackoverflow.com/a/15240082/841804). это должно быть "// * [local-name() = 'double']" – Chanthu

ответ

0

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

Вы можете найти пример реализации NamespaceContext на my blog.