【发布时间】:2015-10-18 01:18:41
【问题描述】:
我有一个非常简单的类,我想将它作为 XML 传输。可接受的 XML 格式是由名称属性和字符串值序列组成的字段列表。我可以注释我的课程以便我可以:
- 使用类名作为xml实体的属性“类型”
- 在字段的 xml 序列中使用类字段名称作为属性“名称”?
推荐的方法是什么?有问题的示例类:
class MyEntityType {
public List<String> myField1; // = {"A", "B"}
public List<String> myField2; // = {"C", "D"}
}
xml格式:
<Entity type="MyEntityType">
<Fields>
<Field name="myField1">
<Value>A</Value>
<Value>B</Value
</Field>
<Field name="myField2">
<Value>C</Value>
<Value>D</Value>
</Field>
</Fields>
</Entity>
我想避免的是必须声明一个 Field 类,并将它们的列表放在我的对象中,因为我想强制执行一组特定的必填字段。
class MyEntityType {
public static class Field {
String name;
String values
}
public List<Fields> fields;
}
为了完整起见,这些是受支持的架构:
<xs:complexType name="EntityComplexType" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:sequence>
<xs:element name="Fields" type="FieldsComplexType" />
</xs:sequence>
<xs:attribute name="Type" type="xs:string" use="required" />
</xs:complexType>
<xs:complexType name="FieldsComplexType" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:sequence>
<xs:element name="Field" type="FieldComplexType" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="FieldComplexType" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:sequence>
<xs:element name="Value" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Alias" type="xs:string" use="optional" />
<xs:attribute name="ReferenceValue" type="xs:string" use="optional" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Name" use="required" />
</xs:complexType>
【问题讨论】:
-
您的 XML Schema 文件与 XML 示例不匹配。