Ich habe folgende xml:Warum funktioniert mein xpath nicht?
<?xml version="1.0" encoding="UTF-8"?>
<prefix:someName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:prefix="someUri" xsi:schemaLocation="someLocation.xsd">
<prefix:someName2>
....
</prefix:someName2>
</prefix:someName>
Und mein Code sieht wie folgt aus:
private Node doXpathThingy(Document doc) {
final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
XPath xPath = XPathFactory.newInstance().newXPath();
xPath.setNamespaceContext(new NamespaceContext(){
@Override
public String getNamespaceURI(String prefix) {
if (prefix == null) {
throw new NullPointerException("Null prefix");
}
return doc.lookupNamespaceURI(prefix);
}
@Override
public String getPrefix(String namespaceURI) {
return null;
}
@Override
public Iterator getPrefixes(String namespaceURI) {
return null;
}
});
try {
XPathExpression expr = xPath.compile(xpathString);
return (Node)expr.evaluate(doc, XPathConstants.NODESET);
} catch (Exception e) {
.... }
}
Ich versuche, dies mit jeder gültigen XPath zur Arbeit zu kommen. Es arbeitet mit dieser XPaths:
: "" "Präfix somename"
Aber NICHT mit: "prefix: someName2". Es gibt null zurück.
Ich denke, ich bekomme immer noch nichts über Namespaces, aber ich verstehe nicht was? Ich habe versucht, die Präfixe von meinem XPath wegzulassen, aber dann funktioniert überhaupt nichts. Ich habe auch überprüft, ob die richtige URL für das Präfix doc.lookupNamespaceURI (Präfix) zurückgegeben wird, und es ist.
Jede Hilfe würde sehr geschätzt werden.
Vielen Dank für Ihre ausführliche Erklärung. Mein Problem wurde gelöst. :) –