有人可以告诉我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标记上直接使用maxOccursxs: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>


minOccursmaxOccurs放在xs:sequence标记上需要重复整个元素序列。

10-07 19:49
查看更多