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

Java 使用jaxb解析xml中的嵌套元素,java,android,xml,jaxb,Java,Android,Xml,Jaxb,我目前正在学习如何在android中使用Jaxb解析xml文件。但我不知道代码中有什么错误,在哪里以及如何更正它。我无法解析xml并获取食物列表。如果我删除列表并将其简单地写为食物,那么只有xml中的最后一个元素被解析,其余元素似乎被覆盖。请帮帮我 我正在尝试解析,目前为止我有以下代码: ----用于解组XML的代码 URL url = new URL("http://www.w3schools.com/xml/simple.xml"); InputSource is = new InputSo

我目前正在学习如何在android中使用Jaxb解析xml文件。但我不知道代码中有什么错误,在哪里以及如何更正它。我无法解析xml并获取食物列表。如果我删除列表并将其简单地写为食物,那么只有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);
-----这些课看起来像在下面 -----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;
}
//描述和热量相同

我试过了
谢谢。

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

我把早餐菜单改成了

@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;
}
}

Android没有JAXB。是的,先生,没有,但我提到了plutext,它对JAXB源代码进行了重新打包(他们使用它进行Android docx到html的转换),所以我设法将整个源代码重新打包成一个在Android中工作并使用的源代码,由于androidI中也不允许使用java.beans,所以我引用了openbeans。我遵循了您的方法,并且能够获得相同的xml输出、检索名称和描述。但是,当我尝试对我的元素执行相同的想法时,我并没有检索第二个子元素。
@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;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="food")
public class Food {
    // the other declarations remain
}