有人可以告诉我XSD与该Java类匹配吗?
public class MyClass {
private List<String> list1;
private List<String> list2;
private XMLGregorianCalendar date;
// getters and setters
}
我已经尝试了以下操作,但是我收到一个:attribute,:attributeGroup,:anyAttribute的预期错误:
<xs:element name="myClass">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="list1" type="xs:string"/>
</xs:sequence>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="list2" type="xs:string"/>
</xs:sequence>
<xs:element name="date" nillable="true" type="xs:dateTime"/>
</xs:complexType>
</xs:element>
所以看来我没有正确使用
<xs:sequence>
标记。有人可以说明一下吗? (我远不是XML相关方面的专家)...我正在Java 7中使用Spring Boot 1.4.4.RELEASE版本。
最佳答案
xs:sequence
中的xs:complexType
定义子元素必须出现的特定顺序。要创建元素列表,只需在要重复的minOccurs
标记上直接使用maxOccurs
和xs:element
,如下所示:
<xs:element name="myClass">
<xs:complexType>
<xs:sequence>
<xs:element name="list1" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="list2" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="date" nillable="true" type="xs:dateTime"/>
</xs:sequence>
</xs:complexType>
</xs:element>
这将创建您期望的类,并需要如下所示的XML(标记顺序很重要):
<myClass>
<list1>a</list1>
<list1>b</list1>
<list2>y</list2>
<list2>z</list2>
<date>2019-06-26T00:00:00.0000000Z</date>
</myClass>
将
minOccurs
和maxOccurs
放在xs:sequence
标记上需要重复整个元素序列。