我在android上使用simplexml框架来解析服务器上的xml。
示例xml就像
<auto>
<field name="SubmitLocation" xsi:type="DataTypeLocation">
<value>
<country>United States</country>
<state>CA</state>
</value>
</field>
<field name="SubmitDateTime" xsi:type="DataTypeText">
<value>2016-06-08T01:10:18Z</value>
</field>
</auto>
架构文件如下
<xs:element name="auto">
<xs:complexType>
<xs:sequence>
<xs:element type="DataBaseType" name="field" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="DataTypeLocation">
<xs:complexContent>
<xs:extension base="DataBaseType">
<xs:sequence>
<xs:element name="value">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="country" maxOccurs="1" minOccurs="0" />
<xs:element type="xs:string" name="state" maxOccurs="1" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="DataTypeText">
<xs:complexContent>
<xs:extension base="DataBaseType">
<xs:sequence>
<xs:element type="xs:string" name="value" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
我的模型类如下
@Root
@Order(elements = {"field"})
public class Auto {
@ElementListUnion(
{
@ElementList(type = CltDataTypeLocation.class),
@ElementList(type = CltDataTypeText.class)
})
protected List<CltDataBaseType> field;
public List<CltDataBaseType> getField() {
if (field == null) {
field = new ArrayList<CltDataBaseType>();
}
return this.field;
}
}
@Root(name = "DataTypeText")
@Order(elements = {"value"})
public class CltDataTypeText
extends CltDataBaseType
{
@Element(required = true)
protected String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
@Root(name = "DataTypeLocation")
@Order(elements = {"value"})
public class CltDataTypeLocation
extends CltDataBaseType
{
@Element(required = true)
protected CltDataTypeLocation.Value value;
public CltDataTypeLocation.Value getValue() {
return value;
}
public void setValue(CltDataTypeLocation.Value value) {
this.value = value;
}
@Root
@Order(elements = {
"country",
"state"})
public static class Value {
@Element
protected String country;
@Element
protected String state;
public String getCountry() {
return country;
}
public void setCountry(String value) {
this.country = value;
}
public String getState() {
return state;
}
public void setState(String value) {
this.state = value;
}
}
}
我遇到了异常。
org.simpleframework.xml.core.PersistenceException: Duplicate annotation of name 'field' on @org.simpleframework.xml.ElementListUnion(value=[@org.simpleframework.xml.ElementList(data=false, empty=true, entry=, inline=false, name=, required=true, type=class com.example.test.client.formdata.model.CltDataTypeLocation), @org.simpleframework.xml.ElementList(data=false, empty=true, entry=, inline=false, name=, required=true, type=class com.example.test.client.formdata.model.CltDataTypeUser), @org.simpleframework.xml.ElementList(data=false, empty=true, entry=, inline=false, name=, required=true, type=class com.example.test.client.formdata.model.CltDataTypeText)]) on field 'field' protected java.util.List com.example.test.client.formdata.model.Formroot$Auto.field
at org.simpleframework.xml.core.StructureBuilder.union(StructureBuilder.java:225)
at org.simpleframework.xml.core.StructureBuilder.process(StructureBuilder.java:179)
at org.simpleframework.xml.core.ObjectScanner.field(ObjectScanner.java:438)
at org.simpleframework.xml.core.ObjectScanner.scan(ObjectScanner.java:371)
at org.simpleframework.xml.core.ObjectScanner.<init>(ObjectScanner.java:82)
at org.simpleframework.xml.core.ScannerFactory.getInstance(ScannerFactory.java:81)
at org.simpleframework.xml.core.Support.getScanner(Support.java:357)
at org.simpleframework.xml.core.Source.getScanner(Source.java:271)
at org.simpleframework.xml.core.Source.getSchema(Source.java:317)
at org.simpleframework.xml.core.Composite.read(Composite.java:198)
at org.simpleframework.xml.core.Composite.read(Composite.java:148)
为什么抱怨重复字段。我有这些字段的数组,它们根据xsi:type属性
而有所不同看起来如果你在xml中使用class属性它应该工作。但在我的情况下,我无法修改来自服务器的这个xml