JAVA XPathApi Problem

Gast #2340912
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!
Gast #2340933
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren