Элемент <name>
фактически связан с пространством имен Atom.
Легко пропустить, так как нет префикса пространства имен, но обратите внимание на элемент <feed>
, есть xmlns="http://www.w3.org/2005/Atom"
, что означает, что элемент <feed>
(и его потомки) будут связаны с этим пространством имен .
Итак, ваш XPath должен быть настроен на использование префикса пространства имен и установить контекст пространства имен для настройки префикса и пространства имен-uri:
XPathFactory xpathFactory = XPathFactory.newInstance();
XPath xpath = xpathFactory.newXPath();
HashMap<String, String> prefMap = new HashMap<>() {{
put("a", "http://www.w3.org/2005/Atom");
}};
SimpleNamespaceContext namespaces = new SimpleNamespaceContext(prefMap);
xpath.setNamespaceContext(namespaces);
String authors = xpath.evaluate("//a:name)", doc);
Или вы можете сделать свой XPath более универсальным, чтобы сопоставлять его с любым элементом с предикатом для оценки его local-name()
и namespace-uri()
:
String authors = xpath.evaluate("//*[local-name()='name' and
namespace-uri()='http://www.w3.org/2005/Atom'])", doc);