Java XPath: Consultas com namespace padrão xmlns

Eu quero fazer uma consulta XPath neste arquivo (trecho mostrado):

<?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"/>

Este é um trecho do código que estou usando:

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

O problema que estou enfrentando é que quando o espaço para nome padrão é referenciado em uma consulta XPath, o método getNamespaceURI não é chamado para resolvê-lo. Esta consulta, por exemplo, não extrai nada:

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

Agora eu tentei "enganar" o analisador, substituindoxmlns com um prefixo falsod e depois escrever ogetNamespaceURI método de acordo (para retornarhttp://xml.sap.com/2002/10/metamodel/webdynpro quandod é encontrado). Neste caso, ogetNamespaceURI é chamado, mas o resultado da avaliação da expressão XPath é sempre uma cadeia vazia.

Se eu remover namespaces do arquivo e da expressão de consulta XPath, posso obter a string que queria (com.test.mypackage).

Existe uma maneira de fazer as coisas funcionarem corretamente com o namespace padrão?

questionAnswers(2)

yourAnswerToTheQuestion