Forum: PC-Programmierung JAVA XPathApi Problem


von jo (Gast)


Lesenswert?

Schönen Abend,
ich habe eine XML Struktur vereinfacht mit Büchern, jedes Buch hat eine 
ID und einen Autor. Zu jedem Buch soll der Titel, der Autor und die id 
ausgegeben werden.
1
<Book title="hello mikrocontroller">
2
 <id> 1 </id>
3
 <author> m.A. </author>
4
</book>
5
<book title = ...
6
...
7
</book>
Das Vorgehen wurde so gewählt dass ein XPath Ausdruck zunächst alle 
Bücher selektiert. Ausgehend vom jeweils aktuellen Buchknoten soll auf 
die restlichen Infos zugegriffen werden.
Die Umsetzung der Idee funktioniert leider nicht:
1
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
2
domFactory.setNamespaceAware(true); // never forget this!
3
DocumentBuilder builder = domFactory.newDocumentBuilder();
4
Document doc = builder.parse("books.xml");
5
XPathFactory factory = XPathFactory.newInstance();
6
XPath xpath = factory.newXPath();
7
XPathExpression expr 
8
= xpath.compile("//book");
9
10
Object result = expr.evaluate(doc, XPathConstants.NODESET);
11
NodeList nodes = (NodeList) result;
12
for (int i = 0; i < nodes.getLength(); i++) {
13
XPathExpression expr2 
14
= xpath.compile("//self::*/author/text()");
15
Object result2 = expr2.evaluate(nodes.item(i), XPathConstants.NODESET);
16
NodeList nodes2 = (NodeList) result2;
17
for (int k = 0; k < nodes2.getLength(); k++) {
18
System.out.println(nodes2.item(k).getNodeValue());    
19
}     
20
}
Das Problem ist, dass die gewünschte Info zwar ausgegeben wird, aber 
viel zu oft.
Ich würde mich sehr freuen, wenn ihr mir Hinweise geben könnten.
Dankeschön!
Grüße
jo!

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Eine kompilierbare Datei + Beispieldaten würde sicherlich helfen.
Was heißt den zu oft? 2x? 3x? unterschiedlich?

von jo (Gast)


Lesenswert?

Hallo Läubi,
danke für deine Antwort.
so oft, wie die Anzahl der Bücher in der Struktur. D.h. Die Info wird 
10x angezeigt, wenn 10 Bücher angelegt sind.

Ich vermute es ist ein Fehler in dem XPath Ausdruck. Oder aber in der 
Umsetzung anfangs die Notelist mit den Büchern zu erstellen, und durch 
eine weitere Schleife für jedes Buch jeweils die weiteren Infos zu 
holen.

Grüße,
jo

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Ich würde erst mal nur die erste Schleife ausgeben... schauen ob das 
richtige rauskommt, eine Ausgabe wie groß die Entsprechenden Nodesets 
sind könnte ebenso helfen wie sinnvolle Variablennamen.

von jo (Gast)


Lesenswert?

danke für die Hinweise. Ich teste entsprechend!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.