Java XPath: запросы с пространством имен по умолчанию xmlns

Я хочу сделать запрос XPath для этого файла (показана выдержка):

<?xml version="1.0" encoding="UTF-8"?>
<!-- MetaDataAPI generated on: Friday, May 25, 2007 3:26:31 PM CEST -->
<ModelClass xmlns="http://xml.sap.com/2002/10/metamodel/webdynpro" xmlns:IDX="urn:sap.com:WebDynpro.ModelClass:2.0">
    <ModelClass.Parent>
        <Core.Reference package="com.test.mypackage" name="ModelName" type="Model"/>

Это фрагмент кода, который я использую:

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document document = builder.parse(new File(testFile));
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
xpath.setNamespaceContext( new NamespaceContext() {
    public String getNamespaceURI(String prefix) {
...

String result = xpath.evaluate(xpathQueryString, document);
System.out.println(result);

Проблема, с которой я сталкиваюсь, состоит в том, что, когда на пространство имен по умолчанию ссылаются в запросе XPath, метод getNamespaceURI не вызывается для его разрешения. Этот запрос, например, ничего не извлекает:

//xmlns:ModelClass.Parent/xmlns:Core.Reference[@type=\"Model\"]/@package

Теперь я "попробовал" обмануть " парсер, заменивxmlns с фальшивым префиксомd а затем писатьgetNamespaceURI метод соответственно (чтобы вернутьhttp://xml.sap.com/2002/10/metamodel/webdynpro когдаd встречается). В этом случаеgetNamespaceURI вызывается, но результатом вычисления выражения XPath всегда является пустая строка.

Если я удаляю пространства имен из файла и из выражения запроса XPath, я могу получить нужную строку (com.test.mypackage).

Есть ли способ заставить вещи работать должным образом с пространством имен по умолчанию?

Ответы на вопрос(2)

Ваш ответ на вопрос