Java XPath: Abfragen mit dem Standardnamespace xmlns

Ich möchte eine XPath-Abfrage für diese Datei durchführen (Auszug gezeigt):

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

Dies ist ein Ausschnitt aus dem Code, den ich verwende:

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

Das Problem besteht darin, dass die Methode getNamespaceURI nicht aufgerufen wird, um den Standardnamespace zu beheben, auf den in einer XPath-Abfrage verwiesen wird. Diese Abfrage extrahiert beispielsweise nichts:

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

Jetzt habe ich versucht, den Parser durch Ersetzen "auszutricksen"xmlns mit einem gefälschten Präfixd und dann schreibe diegetNamespaceURI Methode entsprechend (so um zurückzukehrenhttp://xml.sap.com/2002/10/metamodel/webdynpro wannd angetroffen wird). In diesem Fall ist diegetNamespaceURI wird aufgerufen, aber das Ergebnis der XPath-Ausdrucksauswertung ist immer eine leere Zeichenfolge.

Wenn ich Namespaces aus der Datei und dem XPath-Abfrageausdruck entferne, kann ich die gewünschte Zeichenfolge abrufen (com.test.mypackage).

Gibt es eine Möglichkeit, die Dinge mit dem Standardnamespace ordnungsgemäß funktionieren zu lassen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage