JAVA XPathApi Problem

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

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.