このリンク:JAXB Unmarshalling XML string - Looping through all tags 良い解決策が提案されました。 私はそれから利益を得ようとしていますが、私の場合はそれを働かせることができません。Unmarshalオブジェクト内のJavaループ
<campaign value="field1">
<name value="firstName"/>
<type value="type"/>
<record>
<firstTime value="13"/>
<secondTime value="14"/>
</record>
</campaign>
とアンマーシャリングのためのすべてのクラスを検討し、作成し、作業:
は、このようなXMLを考えてみましょう。私は「名前」と「タイプ」の値を抽出しますが、理由リスト<のできる キャンペーンクラス、名前を含む、値、レコードの[]など
JAXBContext c = JAXBContext.newInstance(Campaign.class);
Unmarshaller u = c.createUnmarshaller();
Campaign campaign = (Campaign) u.unmarshal(file);
>は、私が越えて行くことができないのですこの。
private String Name = null;
[...]
Name = campaign.getName().getValue();
System.out.println(Name);
どのようにループ<record>
にだろう、と他のXMLファイル内<record>
以上があるかもしれないことを知って、FIRSTTIMEとsecondTimeのすべての値を取得しますか?
EDIT: キャンペーンクラス
@XmlRootElement(name = "Campaign")
@XmlType(name = "Campaign", propOrder = {
"Name",
"Type",
"Record" })
public class Campaign {
@XmlElement(required = true)
protected Name Name;
@XmlElement(required = true)
protected Type Type;
@XmlElement(required = true)
protected List<Record> Record= new ArrayList<Record>();
public Name getName() {return Name;}
public void setName (Name value) {this.Name= value;}
public Type getType() {return Type;}
public void setType (Type value) {this.Type = value;}
public void setRecord(Recordvalue) {this.Record.add(value);}
}
録音クラス
@XmlRootElement(name = "Record")
@XmlType(name = "Record", propOrder = {
"firstTime",
"secondTime" })
public class Record{
@XmlElement(required = true)
protected firstTime firstTime;
@XmlElement(required = true)
protected secondTime secondTime;
public Name getFirstTime() {return firstTime;}
public void setFirstTime (firstTime value) {this.firstTime= value;}
public Name getSecondTime() {return secondTime;}
public void setSecondTime (secondTime value) {this.secondTime= value;}
}
プログラムがはるかに大きいですが、それだけで繰り返し続けて..私はすべてのものを抽出する必要があります後でDBにアップロードするために使用します。 しかし、私は画面上にそれらを印刷し、私が必要とするすべての値を持っていることを知っているだけです。
はい私はそのリンクも見ましたが、どうして私はちょうど続ける方法に集中できないのかわかりません、最悪の部分が私にとってより簡単だったようです!
おかげ
EDIT 3: 私はセットするためのメソッドを貼り付け、取得するのを忘れました。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Type")
public class Type {
@XmlAttribute
protected String value;
public String getValue() {return value;}
public void setValue(String value) {this.value = value;}
}
それは、私は単にここにタイプを貼り付け、すべて同じです。
EDIT 4:解決策 最後に解決策を見つけることができましたが、これは提案されたものではなく正しいものとしてマークされています。それは私がgetRecord()
ゲッターを作成するのに役立ちました。
コードを変更することなく、レコードに追加します。クラス:
for (int i=1; i<=campaign.getRecord().size(); i++) { System.out.println(campaign.getRecord().get(i-1).getFirstTime().getValue());
System.out.println(campaign.getRecord().get(i-1).getSecondTime().getValue());
}
私は「13」と「14」を印刷することができる午前、より一般的には、私はrecord
の内側とrecord
を場合何かを印刷することができる午前:
public List<Record> getRecord() { return this.Record; }
とメインクラスに
もう1つのリストが内部にあります:for (int j=1; j<= campaign.getRecord().get(i-1).getANewListInsideRecord().size(); j++) {
System.out.println(campaign.getRecord().get(i-1).getANewListInsideRecord().get(j-1).getAObject().getValue());
}
このジョブを実行します。
-1これは0から始まるからです。
アンマーシャリング要素を試してください。 参照:http://stackoverflow.com/questions/11152917/iterate-through-the-elements-in-jaxb –
使用したマッピングを確認できるように、キャンペーンコードとレコードコードを追加できますか? –
質問が更新されました。ありがとう – Nihvel