# brauche Tips, wie ich am besten auf Elemente zugreife



## Gayson (18. Jul 2004)

Hallo!
Ich brauch mal ein paar Tips von euch, wie ich mit Hilfe von JDom auf bestimmte Elemente in einer XML-Datei zugreifen kann.

Hier eine Beispiel-XML-Datei:


```
<?xml version="1.0"?>
<Pflegekraft>
	<Mitarbeiter>
		<Name>Kai</Name>
		<Stunden>5</Stunden>
		<Urlaub>nicht</Urlaub>
	</Mitarbeiter>
	<Mitarbeiter>
		<Name>Kurt</Name>
		<Stunden>4</Stunden>
		<Urlaub>nicht</Urlaub>
	</Mitarbeiter>
	<Mitarbeiter>
		<Name>Niels</Name>
		<Stunden>3</Stunden>
		<Urlaub>nicht</Urlaub>
	</Mitarbeiter>
	<Mitarbeiter>
		<Name>Timo</Name>
		<Stunden>2</Stunden>
		<Urlaub>nicht</Urlaub>
	</Mitarbeiter>
</Pflegekraft>
```

Wie ich den ersten Namen aufrufe (Kai), habe ich schon rausgefunden, geht ja relativ einfach mit getChild.
Gibt es eine Möglichkeit, den 3. Namen aus der Datei auszuwerfen? Soweit ich das verstanden habe, sollte das mit getChildren gehen:


```
try {
			SAXBuilder builder = new SAXBuilder();
			Document doc = builder.build("Mitarbeiter.librml");
			Element root = doc.getRootElement();
			Element mitarbeiter = root.getChild( "Mitarbeiter" );
			List alleMitarbeiter = root.getChildren();
			System.out.println(alleMitarbeiter.get(3));
		} catch (JDOMException e){e.printStackTrace();}
		catch (IOException e) {e.printStackTrace();}
```

So, wenn ich das hätte, würde mich noch interessieren, wieviel (Über)Stunden der 3. Mitarbtier hat, wie komm ich da am besten ran?


----------



## Gayson (18. Jul 2004)

Nachdem ich die hälfte meines Tages mit Lektüre verbracht habe, kann ich mir jetzt selbst den Code präsentieren  :


Gibt aus, wieviel Überstunden Niels hat:

```
try {
			SAXBuilder builder = new SAXBuilder();
			Document doc = builder.build("Mitarbeiter.librml");
			Element root = doc.getRootElement();
			List mitarbeiterInfo = root.getChildren("Mitarbeiter");;
			Iterator mitarbeiterIterator = mitarbeiterInfo.iterator();
			while (mitarbeiterIterator.hasNext()) {
				Element mitarbeiterElement = (Element) mitarbeiterIterator.next();
				Element mitarbeiterName = mitarbeiterElement.getChild("Name");
				if(mitarbeiterName.getText().equals("Niels")){
					Element mitarbeiterStunden = mitarbeiterElement.getChild("Stunden");
					System.out.println(mitarbeiterStunden.getText());
				}
			}
		} catch (JDOMException e){e.printStackTrace();}
		catch (IOException e) {e.printStackTrace();}
```



Gibt aus, wer der dritte Mitarbeiter in der Liste ist:

```
try {
			SAXBuilder builder = new SAXBuilder();
			Document doc = builder.build("Mitarbeiter.librml");
			Element root = doc.getRootElement();
			List mitarbeiterInfo = root.getChildren("Mitarbeiter");;
			Iterator mitarbeiterIterator = mitarbeiterInfo.iterator();
			int count=0;
			while (mitarbeiterIterator.hasNext()) {
				count ++;
				Element mitarbeiterElement = (Element) mitarbeiterIterator.next();
				Element mitarbeiterName = mitarbeiterElement.getChild("Name");
				if (count==3){
					System.out.println(mitarbeiterName.getText());
				}
			}
		} catch (JDOMException e){e.printStackTrace();}
		catch (IOException e) {e.printStackTrace();}
```


----------



## Gayson (22. Jul 2004)

Hallo!
Ich habe ein neues Problem mit dem ändern von XML-Daten. Folfendes Beispiel: Ich möchte bei oben genannter XML-Tabelle beim "Kurt" die "Stunden" von "4" in "drei" ändern.
Doch irgendwie klappt dies nicht:


```
SAXBuilder builder = new SAXBuilder();
						Document doc = builder.build("Mitarbeiter.librml");
						Element root = doc.getRootElement();
						List mitarbeiterInfo = root.getChildren("Mitarbeiter");;
						Iterator mitarbeiterIterator = mitarbeiterInfo.iterator();
						while (mitarbeiterIterator.hasNext()) {
							Element mitarbeiterElement = (Element) mitarbeiterIterator.next();
							Element mitarbeiterName = mitarbeiterElement.getChild("Name");
							if(mitarbeiterName.getText().equals("Kurt")){
								mitarbeiterElement.removeChild("Stunden");
								Element stunden = new Element("Stunden");
								stunden.addContent("drei");
								mitarbeiterElement.addContent(stunden);
							}
						}
```


----------



## Gayson (23. Jul 2004)

Wie gehtes denn generell, den Inhalt von XML-Elementen zu ändern?


----------



## Gayson (24. Jul 2004)

Ich weiß wirklich net weiter!


----------



## citizen_erased (26. Jul 2004)

du speicherst den umgeformten xml-baum nicht in der datei ab. er exisitert nur im speicher. 


```
public void writeFile() {        
        OutputStream stream = null;
        try {
            stream = new FileOutputStream(file);
        }
        catch(FileNotFoundException fnfe) {
           // ...
        }
        
        Format format = Format.getPrettyFormat();
        XMLOutputter out = new XMLOutputter(format); 
                
        try {
            synchronized (file) { 
                out.output(doc,stream);
            }
            stream.flush();
            stream.close();
        }
        catch(IOException ioe) {
            // ...
        }        
    }
```


----------

