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!