2013-10-05 109 views
2

我目前正在学习如何在android中使用Jaxb解析xml文件。但我不知道代码中有什么问题,以及在哪里以及如何纠正它。我无法解析XML并获取食品列表。如果我删除List并简单地将它写为Food,那么只有xml中的最后一个元素被解析,其余部分似乎被覆盖。请帮帮我。使用jaxb解析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 感谢。

+0

Android没有JAXB。 – CommonsWare

+0

是的,先生,它doesnt,但我提到的plutext,有jaxb源码重新包装,(他们使用它的android docx到html转换),所以我设法重新打包成一个工作和使用它在android,引用openbeans,因为java.beans也是不允许在android –

回答

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 
} 
+0

我遵循你的方法,我能够得到相同的XML输出,检索名称和描述。但是,当我试图用我的想法做同样的想法时,我没有检索到第二个子元素。 –