# Java & XML Wie kann ich Unterknoten zählen?



## jennyk (25. Februar 2004)

Hallo,

ich lese eine XML-Datei in Java mit DOM ein. Diese hat folgenden Aufbau:

<buecher>
        <buch>
               <titel>...</titel>
               <kapitel>
                      <ueberschrift> ... </ueberschrift>
               </kapitel>
               <kapitel>
                      <ueberschrift> ... </ueberschrift>
               </kapitel>
         </buch>
         <buch>
               <titel>...</titel>
               <kapitel>
                      <ueberschrift> ... </ueberschrift>
               </kapitel>
         </buch>
</buecher>


Wie kann ich nun mit Java rauskriegen, wie viele Kapitel ein Buch jeweils hat?

Danke für Eure Hilfe!


----------



## Thomas Darimont (25. Februar 2004)

Hallo!

Hab dein Beispiel leicht abgewandelt...

Ich würde dir Raten wie ich dom4j zu verwenden, damit geht die Aktion ganz locker von der Hand, ohne dass man sich wie mit den "einfachen" sun Mitteln die Hände bricht ...

http://www.dom4j.org/
http://www.dom4j.org/download.html
http://www.dom4j.org/guide.html

Das XML File hab ich auch ein wneig verändert:


```
<?xml version="1.0"?>
<buecher>
	<buch>
		<titel>B1T</titel>
		<kapitel>
			<kap>
				<ueberschrift>B1K1Ue</ueberschrift>
			</kap>
			<kap>
				<ueberschrift>B1K2Ue</ueberschrift>
			</kap>
		</kapitel>
	</buch>
	<buch>
		<titel>B2T</titel>
		<kapitel>
			<kap>
				<ueberschrift>B2K1Ue</ueberschrift>
			</kap>
			<kap>
				<ueberschrift>B2K2Ue</ueberschrift>
			</kap>
			<kap>
				<ueberschrift>B2K3Ue</ueberschrift>
			</kap>
		</kapitel>
	</buch>
</buecher>
```


```
import java.io.File;
import java.net.MalformedURLException;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/*
 * Created on 25.02.2004
 * 
 * To change the template for this generated file go to Window - Preferences -
 * Java - Code Generation - Code and Comments
 */
/**
 * @author Administrator
 * 
 * To change the template for this generated type comment go to Window -
 * Preferences - Java - Code Generation - Code and Comments
 */
public class XMLTest {
	public static void main(String[] args) {
		new XMLTest().doIt();
	}
	/**
	 *  
	 */
	private void doIt() {
		// TODO Auto-generated method stub
		SAXReader reader = new SAXReader();
		Document doc = null;
		try {
			doc = reader.read(new File("c:/books.xml"));
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		if (doc == null)
			throw new RuntimeException("Doc was null");
		Element root = doc.getRootElement();
		Iterator iter = root.elementIterator();
		while (iter.hasNext()) {
			Element element = (Element) iter.next();
			//System.out.println(element.getName());
			Element title = element.element("titel");
			int kapCnt = 0;
			List list = element.elements("kapitel");
			Iterator kapIter = list.iterator();
			while (kapIter.hasNext()) {
				Element kap = (Element) kapIter.next();
				List list2 = kap.elements();
				kapCnt = list2.size();
			}
			System.out.println("Das Buch " + title.getData() + " enthält "
					+ kapCnt + " Kapitel.");
		}
		System.out.println();
		System.out.println("done");
	}
}
```

Ausgabe:



> Das Buch B1T enthält 2 Kapitel.
> Das Buch B2T enthält 3 Kapitel.
> 
> done



Gruß Tom

Gruß Tom


----------



## jennyk (26. Februar 2004)

Danke! Hast mir echt geholfen


----------



## Thomas Darimont (27. Februar 2004)

Kleiner Nachtrag:

Mit XPath geht das ganze noch ein wenig Komfortabler ...
siehe:
http://www.zvon.org/xxl/XPathTutorial/General_ger/examples.html

Gruß Tom


----------

