使用jaxb解析xml中的嵌套元素

时间:2013-10-05 16:27:11

标签: java android xml jaxb

我目前正在学习如何在android中使用Jaxb解析xml文件。但我不知道代码中有什么问题,以及在何处以及如何纠正它。我无法解析xml并获取食物清单。如果我删除List并简单地将其写为Food,那么只解析xml中的最后一个元素,其余部分似乎被覆盖。请帮帮我。

我正在尝试解析http://www.w3schools.com/xml/simple.xml,到目前为止我有这段代码:

----用于解决XML的代码

URL url = new URL("http://www.w3schools.com/xml/simple.xml");
InputSource is = new InputSource(url.openStream());
is.setEncoding("ISO-8859-1");
JAXBContext jaxbContext = JAXBContext.newInstance(BreakfastMenu.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
BreakfastMenu menu = (BreakfastMenu)jaxbUnmarshaller.unmarshal(is);

-----这些课程看起来如下 ----- Breakfast.java

@XmlRootElement(name="breakfast_menu")
public class BreakfastMenu {
private List<Food> food = new ArrayList<Food>();

public List<Food> getFood() {
    return food;
}

@XmlElement(name="food")
public void setFood(List<Food> food) {
this.food = food;
}

}

---食品类

@XmlRootElement(name="food")
public class Food {
private String name;
private String description;
private String calories;

public String getName() {
return name;
}

@XmlElement
public void setName(String name) {
    this.name = name;
}

//描述和卡路里相同

P.S:我试过this link too 感谢。

1 个答案:

答案 0 :(得分:8)

解决这个问题感觉很棒。对于可能最终面临同样问题的其他人:这是解决方案:

我将BreakfastMenu.class更改为

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="breakfast_menu")
public class BreakfastMenu {


@XmlElement(name="food", type=Food.class)
private List<Food> food  = new ArrayList<Food>();

public List<Food> getFood() {
    return food;
}

public void setFood(List<Food> food) {
this.food = food;
}
}

在Food.class中,我删除了@XMLElement注释,并添加了以下内容:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="food")
public class Food {
    // the other declarations remain
}