2

私は現在、アンドロイドで 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;
}

// 説明とカロリーも同じ

PS:このリンクも試してみまし た。ありがとうございます。

4

1 に答える 1

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
}
于 2013-10-06T09:09:31.680 に答える