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?