XPath 1.0 не поддерживает понятие пространства имен по умолчанию (, XPath 2.0 делает). Любой неснабженный префиксом тег, как всегда предполагается, является частью пространства имен без имен.
При использовании XPath 1.0 Вам нужно что-то вроде этого:
public static void main(String args[]) throws Exception {
SAXBuilder builder = new SAXBuilder();
Document d = builder.build("xpath.xml");
XPath xpath = XPath.newInstance("x:collection/x:dvd");
xpath.addNamespace("x", d.getRootElement().getNamespaceURI());
System.out.println(xpath.selectNodes(d));
}
У меня была подобная проблема, но мой был то, что у меня была смесь исходных данных XML, некоторым из которых определили пространство имен и других, которые не сделали. Для упрощения моей проблемы, я выполнил следующий отрывок JDOM после загрузки документа.
for (Element el : doc.getRootElement().getDescendants(new ElementFilter())) {
if (el.getNamespace() != null) el.setNamespace(null);
}
После удаления всех пространств имен я смог использовать простой getChild ("elname") навигация стиля или простые запросы XPath.
я не рекомендовал бы эту технику как общее решение, но в моем случае это было определенно полезно.