Friday, 30 January 2015

How to read XML document using JAXB



I need to parse large xml. And I tried to do it in the following way:


Testing FilmParser.java class:



public class FilmParser {
public static void main(String args[]) throws IOException, Exception{

List<Film> filmList= new ArrayList<Film>();

String xml = "<?xml version='1.0' encoding='utf-8' ?> <film-list> <item company=\"New Line Cinema\" year=\"1995\" film=\"Se7en\" /> <item company=\"Warner Brothers\" year=\"2005\" film=\"Batman Begins\" /> <item company=\"Larner Brothers\" year=\"2010\" film=\"Inception\" /> </film-list>";
Document doc = loadXMLFromString(xml);
Node baseNode = doc.getFirstChild();

NodeList children = baseNode.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
Node item = children.item(i);
if (item.getNodeType() == Node.ELEMENT_NODE) {
String company = item.getAttributes().getNamedItem("company").getTextContent();
int year = Integer.parseInt(item.getAttributes().getNamedItem("year").getTextContent());
String film = item.getAttributes().getNamedItem("film").getTextContent();
Film filmObj = new Film(company, year, film);
filmList.add(filmObj);
System.out.println(filmObj);
}
}

}

private static Document loadXMLFromString(String xml) throws Exception
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputSource is = new InputSource(new StringReader(xml));
return builder.parse(is);
}

}


And Film.java class:



public class Film {
private String company;
private int year;
private String film;

public Film(){
}

public Film(String company, int year, String film) {
super();
this.company = company;
this.year = year;
this.film = film;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public String getFilm() {
return film;
}
public void setFilm(String film) {
this.film = film;
}

@Override
public String toString() {
return "Film [company=" + company + ", year=" + year + ", film=" + film
+ "]";
}

}


Please explain how could I actually rewrite this using JAXB, and do not parse xml manually.


No comments:

Post a Comment