当前位置: 首页 > 知识库问答 >
问题:

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

魏高邈
2023-03-14

我目前正在学习如何在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、 我也尝试过这个链接,谢谢。

共有1个答案

壤驷深
2023-03-14

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

我将早餐菜单.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;
}
}

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

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="food")
public class Food {
    // the other declarations remain
}
 类似资料:
  • 抱歉长帖,提前感谢! 在我的JAXB中(代码如下),我有一组值集,其中内部集被包装成一个容器类。所以,我有一组值容器,其中一个值是一个泛型类。问题:除非选择的泛型类是硬编码的,否则值不会得到解析。 关于XML的说明: >

  • 问题内容: 我有以下XML,没有XSD或架构,我想使用JAXB解析为java对象,因为我听说它比SAX更好。有没有一种方法可以通过注释或更好的方法来完成此任务?它是否使我只需要一个FosterHome类?我很难找到如何执行此操作的任何帮助,不胜感激。 我本来是想开设FosterHome,Family和Child班的。使用JAXB,不再需要3个类吗?我不确定如何处理此问题,因为ChildID在两个不

  • 问题内容: 我正在尝试从上述JSON检索邮政编码。我正在用gson解析它。我是JSON的新手,从我在这里的所有文章中读到的内容(有些与此类似),我都知道字段名称应保持原样。所以我知道我必须做出4类,即响应,视图,结果和地址。我使它们成为静态嵌套类,但是我只得到空值作为输出。在下一个JSON中,我有多个地址。但是我只停留在这个单一的回应上。 举一个简短的例子,我尝试使用此代码检索Timestamp,

  • 我想做的是使用Gson将嵌套的json数据解析为Java对象,并使用自定义的toString()将其打印出来。 Json内容 POJO类:示例 POJO类:JsonFormatter 我的POJO还有其他类,我试图将其解析为Gson的方式是: 但是当我试图打印出它的子值时,比如 我得到了错误: 我想实现的是将上面的json内容打印成这样: 谁能帮我解决这个问题吗?提前谢谢!

  • 问题内容: 我想嵌套每个XML元素。 请看以下示例: 它将返回以下XML: 这不是我想要XML格式化的方式。而是我希望每个元素都被如下所示的元素包裹: 这家伙有帮助吗? 问题答案: 好的,这是代码。 这是输出。 祝你好运…

  • 问题内容: 我有以下XML: 我有以下Java类将其映射到: 当我尝试与解组 我得到这个错误 我需要参数同时具有’attr’属性和内容,所以我在做什么错呢? 问题答案: 默认情况下, JAXB(JSR-222) 实现将公共属性(获取/设置方法)和带注释的字段视为已映射(和分开)。默认映射是这样,因此您的属性将被视为以此方式映射。 解决方案1 由于您要注释字段,因此需要在类中添加。 解决方案#2 注