Verschachtelte XML auslesen

zat

Mitglied
Hallo,
Ich habe eine XML mit ähnlicher Struktur:
Code:
<?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?
 
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...)

Java:
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;
  }
}

Java:
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):
Java:
JAXBContext context = JAXBContext.newInstance(Cat.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
FileInputStream fileInputStream = new FileInputStream(PfadZurXmlDatei);
Cat cat = (Cat) unmarshaller.unmarshal(fileInputStream);
fileInputStream.close();
 
Zuletzt bearbeitet:

Zurück
Oben