Java XPath: kwerendy z domyślną przestrzenią nazw xmlns

Chcę wykonać zapytanie XPath w tym pliku (pokazano fragment):

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

To fragment kodu, którego używam:

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

Problem, z którym się borykam, polega na tym, że w przypadku odwołania do domyślnej przestrzeni nazw w kwerendzie XPath metoda getNamespaceURI nie jest wywoływana w celu jej rozwiązania. To zapytanie na przykład nic nie wyciąga:

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

Teraz próbowałem „wyłudzić” parser, zastępując goxmlns z fałszywym prefiksemd a następnie pisaniegetNamespaceURI metoda (odpowiednio, aby powrócićhttp://xml.sap.com/2002/10/metamodel/webdynpro gdyd napotkany). W tym przypadkugetNamespaceURI jest wywoływane, ale wynikiem oceny wyrażenia XPath jest zawsze pusty łańcuch.

Jeśli usuwam przestrzenie nazw z pliku i wyrażenia zapytania XPath, mogę uzyskać żądany ciąg (com.test.mypackage).

Czy istnieje sposób na poprawne działanie z domyślną przestrzenią nazw?

questionAnswers(2)

yourAnswerToTheQuestion