Ne, weiß nicht worauf Du hinauswillst.
Die liest mir den Knoten <photo_information> aus, da ich nur einen davon habe, kann ich das erste Objekt nehmen…
den Gedankensprung sehe ich auch nicht allzu sehr,
aber weiter überlegt, wieviele Knoten gibt es? die gelieferte Anzahl 1 wohl doch nicht so falsch,
kommt man von einem photos-Element noch weiter?..
die i-Schleife ist im Moment übrigens nicht gut im Programm, da du mit i nichts machst,
zum Glück nur genau ein Element in der ersten list, sonst wäre allles mehrfach ausgeführt
Nur so als Hinweis: In deinem Fall ist JAXB wahrscheinlich bequemer als JDOM, du erstellst einfach eine Klasse, die die gleiche Struktur wie dein XML hat, annotierst ein bisschen, und dann übernimmt JAXB das Einlesen.
[QUOTE=Landei]Nur so als Hinweis: In deinem Fall ist JAXB wahrscheinlich bequemer als JDOM, du erstellst einfach eine Klasse, die die gleiche Struktur wie dein XML hat, annotierst ein bisschen, und dann übernimmt JAXB das Einlesen.
@TO Du solltest ein wenig an deiner Einstellung arbeiten. Wir helfen hier gerne, aber ein bisschen Eigeninitiative sollte schon kommen.
Aber ich will mal nicht so sein, hier die einfachste JAXB-Version:
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import java.io.File;
public class Test {
public static void main(String[] args) {
try {
File file = new File("myapp.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(MyApp.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
MyApp myApp = (MyApp) jaxbUnmarshaller.unmarshal(file);
System.out.println(myApp);
} catch (JAXBException e) {
e.printStackTrace();
}
}
}```
```import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;
@XmlRootElement(name = "myapp")
public class MyApp {
private List<PhotoInfo> photoInfoList;
public List<PhotoInfo> getPhotoInfoList() {
return photoInfoList;
}
@XmlElement(name = "photo_information")
public void setPhotoInfoList(List<PhotoInfo> photoInfoList) {
this.photoInfoList = photoInfoList;
}
}
public class PhotoInfo {
private String date;
private String time;
private String userData;
private int prints;
private Photos photos;
public String getDate() {
return date;
}
@XmlElement
public void setDate(String date) {
this.date = date;
}
public String getTime() {
return time;
}
@XmlElement
public void setTime(String time) {
this.time = time;
}
public String getUserData() {
return userData;
}
@XmlElement
public void setUserData(String userData) {
this.userData = userData;
}
public int getPrints() {
return prints;
}
@XmlElement
public void setPrints(int prints) {
this.prints = prints;
}
public Photos getPhotos() {
return photos;
}
@XmlElement
public void setPhotos(Photos photos) {
this.photos = photos;
}
}
import java.util.List;
public class Photos {
List<Photo> photo;
String output;
public List<Photo> getPhoto() {
return photo;
}
@XmlElement
public void setPhoto(List<Photo> photo) {
this.photo = photo;
}
public String getOutput() {
return output;
}
@XmlElement
public void setOutput(String output) {
this.output = output;
}
}
import javax.xml.bind.annotation.XmlValue;
public class Photo {
private int image;
public int getImage() {
return image;
}
@XmlAttribute
public void setImage(int image) {
this.image = image;
}
public String getName() {
return name;
}
@XmlValue
public void setName(String name) {
this.name = name;
}
private String name;
}
Wenn output nicht in der photos-collection wäre (oder z.B. ein Attribut von photos), brauchte man die Photos-Klasse nicht, sondern könnte die Photo-Liste gleich in PhotoInfo auslesen (mit einer zusätzlichen @XmlElementWrapper(name="photos")-Annotation). Datum und Zeit sind hier erst mal String - das bekommt auch netter hin, aber ein bisschen anstrengen solltest du dich ruhig auch…