Я думаю, вы ошибаетесь в отношении того, как выглядит ваш XML. Я считаю, что вы также должны иметь:
xmlns="www.example.com/xsd/"
там где-то в противном случае ваши ABC
элементы будут находиться в NO_NAMESPACE
пространстве имен (и метод ABC ToString() будет выглядеть следующим образом: [Element:ABC]
)
Итак, ваш XML-фрагмент не соответствует результату toString() ABC Element
.
Если вы исправите свой вопрос, будет легче предложить, как должно выглядеть ваше выражение XPath.
EDIT, предполагая, что я прав, что у вас есть дополнительное переопределение пространство имен по умолчанию, то вы можете использовать следующую JDOM, чтобы получить ABC
элементы:
XPathFactory xpf = XPathFactory.instance();
Namespace defns = Namespace.getNamespace("defns", "www.example.com/xsd/");
XPathExpression<Element> xpe = xpf.compile("//defns:ABC", Filters.element(), null, defns);
List<Element> abcs = xpe.evaluate(doc);
Вы должны прочитать следующий отрывок from the XPath specification:
QName в тесте узла расширено в расширенное имя, используя объявления пространства имен из контекста выражения. Точно так же выполняется расширение для имен типов элементов в начальных и конечных тегах, за исключением того, что пространство имен по умолчанию, объявленное с помощью xmlns, не используется: если QName не имеет префикса, тогда URI пространства имен имеет значение NULL (это то же самое имена атрибутов пути). Это ошибка, если в QName есть префикс, для которого нет объявления пространства имен в контексте выражения.