Hallo Freunde,
normalerweise evaluiert man eine xpath-abfrage auf ein Object vom Typ Document. Nun habe ich sehr viele Abfragen und jedesmal das Document zu nehmen, macht die Sache extrem langsam. Es ist gar nicht nötig. Es wäre performanter, wenn ich ihn nur ein Node geben könnte. Aber leider hauen nur Abfragen, wie "@att" hin, ich kann nicht mit XPath auf die Kinder des Nodes zu greifen...
Der String ist leer, bei XPathConstants.NODESET kommt eine NodeList der Länge 0 raus. Also nichts gefunden. Hab auch schon reichlich rumprobiert mit der XPath-Abfrage, aber sobald man die Kinder will, gehts nicht.
Weiß jemand Rat?
EDIT: Peinlich: Es funktioniert wunderbar, nur dumm, wenn der XPath-Ausdruck falsch ist!
normalerweise evaluiert man eine xpath-abfrage auf ein Object vom Typ Document. Nun habe ich sehr viele Abfragen und jedesmal das Document zu nehmen, macht die Sache extrem langsam. Es ist gar nicht nötig. Es wäre performanter, wenn ich ihn nur ein Node geben könnte. Aber leider hauen nur Abfragen, wie "@att" hin, ich kann nicht mit XPath auf die Kinder des Nodes zu greifen...
Java:
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true); // never forget this!
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse("Z:/PTB/Voraussetzungen/Input/api_cp_kundendaten.sql.xml");
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
//1. XPath-Abfrage
XPathExpression expr = xpath
.compile("/node[@name='Start']/node[@name='PackageSpec']/node[@name='DeclarativeSection']/node[@name='FieldDeclarationForDeclarativeSection']");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList)result;
System.out.println("hauptanzahl:"+nodes.getLength());//XXX
for (int i = 0; i < nodes.getLength(); i++) {
//2. XPath-Abfrage... jetzt mit Node!
expr = xpath.compile("node[name='UnqualifiedID']/@image");
Object result2 = expr.evaluate(nodes.item(i), XPathConstants.STRING);
System.out.println("2.xpath:"+(String)result2);
}
Weiß jemand Rat?
EDIT: Peinlich: Es funktioniert wunderbar, nur dumm, wenn der XPath-Ausdruck falsch ist!
Zuletzt bearbeitet: