Android で Java オブジェクトから XML を生成する必要があります。XML ノードは明確な順序である必要があります。XML ノードのXStream ドキュメントの順序は、オブジェクトのフィールド定義と一致します。Java クラス (文字列、日付など) をフィールドとして使用しても問題ありません。しかし、オブジェクトをフィールドとしてシリアル化する必要がある場合に問題があります。
これが私のコードです:
final XStream x = new XStream();
x.autodetectAnnotations(true);
SecondEntity secondEntity = new SecondEntity();
secondEntity.setSecondaryDate(new Date());
secondEntity.setSecondaryString("Secondary String");
InnerEntity innerEntity = new InnerEntity();
innerEntity.setInnerDate(new Date());
innerEntity.setInnerString("Inner String");
SomeEntity someEntity = new SomeEntity();
someEntity.setInnerEntity(innerEntity);
someEntity.setSecondEntity(secondEntity);
someEntity.setSomeDate(new Date());
someEntity.setSomeString("Some string");
x.toXML(someEntity)
一部のエンティティ:
@XStreamAlias("SomeEntity")
public class SomeEntity {
@XStreamAlias("innerEntity")
private InnerEntity innerEntity;
@XStreamAlias("secondEntity")
private SecondEntity secondEntity;
@XStreamAlias("someString")
private String someString;
@XStreamAlias("someDate")
private Date someDate;
public InnerEntity getInnerEntity() {
return innerEntity;
}
public void setInnerEntity(InnerEntity innerEntity) {
this.innerEntity = innerEntity;
}
public SecondEntity getSecondEntity() {
return secondEntity;
}
public void setSecondEntity(SecondEntity secondEntity) {
this.secondEntity = secondEntity;
}
public String getSomeString() {
return someString;
}
public void setSomeString(String someString) {
this.someString = someString;
}
public Date getSomeDate() {
return someDate;
}
public void setSomeDate(Date someDate) {
this.someDate = someDate;
}
}
内部エンティティ:
@XStreamAlias("InnerEntity")
public class InnerEntity {
@XStreamAlias("innerString")
private String innerString;
@XStreamAlias("innerDate")
private Date innerDate;
public String getInnerString() {
return innerString;
}
public void setInnerString(String innerString) {
this.innerString = innerString;
}
public Date getInnerDate() {
return innerDate;
}
public void setInnerDate(Date innerDate) {
this.innerDate = innerDate;
}
}
2 番目のエンティティ:
@XStreamAlias("SecondEntity")
public class SecondEntity {
@XStreamAlias("secondaryString")
private String secondaryString;
@XStreamAlias("secondaryDate")
private Date secondaryDate;
public String getSecondaryString() {
return secondaryString;
}
public void setSecondaryString(String secondaryString) {
this.secondaryString = secondaryString;
}
public Date getSecondaryDate() {
return secondaryDate;
}
public void setSecondaryDate(Date secondaryDate) {
this.secondaryDate = secondaryDate;
}
}
私は得る
<SomeEntity>
<innerEntity>
<innerDate>2013-02-28 18:04:24.184 UTC</innerDate>
<innerString>Inner String</innerString>
</innerEntity>
<secondEntity>
<secondaryDate>2013-02-28 18:04:24.183 UTC</secondaryDate>
<secondaryString>Secondary String</secondaryString>
</secondEntity>
<someDate>2013-02-28 18:04:24.184 UTC</someDate>
<someString>Some string</someString>
</SomeEntity>
私が必要なとき:
<SomeEntity>
<innerEntity>
<innerString>Inner String</innerString>
<innerDate>2013-02-28 18:04:24.184 UTC</innerDate>
</innerEntity>
<secondEntity>
<secondaryString>Secondary String</secondaryString>
<secondaryDate>2013-02-28 18:04:24.183 UTC</secondaryDate>
</secondEntity>
<someDate>2013-02-28 18:04:24.184 UTC</someDate>
<someString>Some string</someString>
</SomeEntity>