# Verschachtelte XML auslesen



## zat (30. Apr 2014)

Hallo,
Ich habe eine XML mit ähnlicher Struktur:

```
<?xml version="1.0" encoding="UTF-8"?>
<St>
<CAT>
<PARTS>
    <PART>
        <NAME>nameStruct</NAME>
        <PARTS>            
            <PART id= "idPa1">
                <NAME>namePa1</NAME>
                </PART>
            <PART id= "idPa2">
                <NAME>namePa2</NAME>
            </PART>
            </PARTS>         
  </PART>
    <PART>
        <NAME>name</NAME>        
        </PART>
    </PARTS>
</CAT>
</St>
```
Wie kann ich nun die Werte im "nameStruct" Knoten auslesen?


----------



## Thallius (30. Apr 2014)

Google einfach mal nach jdom

Gruß

Claus


----------



## JavaMeister (1. Mai 2014)

Dafür würde ich SAX verwenden.


----------



## grindelaner (19. Mai 2014)

Schau dir JAXB an.
Dann hast du die XML-Strukur auch gleich in eine Java-Klasse laden.
Das macht dir das Arbeiten viel leichter 

Einlesen tust du dann das ganze mit dem Unmarshaller 

Beispiel für deine XML-Datei (Der Einfachheithalber habe ich CAT als RootElement deklariert...)


```
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import java.util.ArrayList;
import java.util.List;

@XmlRootElement(name = "Cat")
@XmlAccessorType(value = XmlAccessType.FIELD)
public class Cat {

  @XmlElementWrapper(name = "PARTS")
  @XmlElement(name = "PART", type = Part.class)
  private List<Part> _parts;

  public Cat() {
    _parts = new ArrayList<Part>();
  }

  public List<Part> getParts() {
    return _parts;
  }
}
```


```
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;

@XmlAccessorType(value = XmlAccessType.FIELD)
public class Part {

  @XmlAttribute(name = "id")
  private String _id;

  @XmlElement(name = "NAME")
  private String _name;

  public String getId() {
    return _id;
  }

  public String getName() {
    return _name;
  }
}
```


Unmarshaller (haust du irgendwo rein und implementierst noch das ExceptionHandling):

```
JAXBContext context = JAXBContext.newInstance(Cat.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
FileInputStream fileInputStream = new FileInputStream(PfadZurXmlDatei);
Cat cat = (Cat) unmarshaller.unmarshal(fileInputStream);
fileInputStream.close();
```


----------

