Mam plik xml na którym chce wykonac: Unmarshalling i wyświetlić odczytane z tego pliku xml wartości. Prawie wszystko się udaje poza wydobyciem pierwszego rekordu, który ma dodatkowe znaczniki (w stosunku do pozostałego kodu) <page>:
<packages id="pl.package1">
<page>
<answername>java is a programming language</answername>
<postedby>ravi</postedby>
</page>
</packages>
Co zrobić aby znaczniki <page> również były uwzględniane w moim unmarshallingu.
Cały kod poniżej:
klasa Question:
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Question {
private List<Packages> packages;
public Question() {}
public Question(List<Packages> packages) {
super();
this.packages = packages;
}
@XmlElement
public List<Packages> getPackages() {
return packages;
}
public void setPackages(List<Packages> packages) {
this.packages = packages;
}
}
klasa Packages:
import javax.xml.bind.annotation.XmlAttribute;
public class Packages {
private String id;
private String answername;
private String postedby;
public Packages() {}
public Packages(String id, String answername, String postedby) {
super();
this.id = id;
this.answername = answername;
this.postedby = postedby;
}
@XmlAttribute
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAnswername() {
return answername;
}
public void setAnswername(String answername) {
this.answername = answername;
}
public String getPostedby() {
return postedby;
}
public void setPostedby(String postedby) {
this.postedby = postedby;
}
}
klasa XmlToObject:
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
public class XmlToObject {
public static Map<String, String> mapa = new HashMap<String, String>();
public static void main(String[] args) {
try {
File file = new File("question.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Question.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Question que= (Question) jaxbUnmarshaller.unmarshal(file);
System.out.println("Answers:");
List<Packages> list=que.getPackages();
for(Packages ans:list) {
System.out.println(ans.getId()+" "+ans.getAnswername()+" "+ans.getPostedby());
}
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
plik question.xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<question>
<packages id="pl.package1">
<page>
<answername>java is a programming language</answername>
<postedby>ravi</postedby>
</page>
</packages>
<packages id="pl.package2">
<answername>tom is a platform</answername>
<postedby>john</postedby>
</packages>
<packages id="pl.package3">
<answername>gum is a platform</answername>
<postedby>krzys</postedby>
</packages>
</question>
i wynik z konsoli:
Answers:
pl.package1 null null
pl.package2 tom is a platform john
pl.package3 gum is a platform krzys