简体   繁体   English

Java class 到 XSD

[英]Java class to XSD

Could someone please tell me what XSD matches this Java class?有人可以告诉我 XSD 与这个 Java class 匹配吗?

public class MyClass {

    private List<String> list1;

    private List<String> list2;

    private XMLGregorianCalendar date;

    // getters and setters
}

I've tried the following, but I'm receiving an One of:attribute, :attributeGroup, :anyAttribute is expected error:我已经尝试了以下方法,但我收到了一个:attribute, :attributeGroup, :anyAttribute is expected错误:

<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>

So it seems I'm not using the <xs:sequence> tag correctly.所以看来我没有正确使用<xs:sequence>标签。 Could someone please shed some light?有人可以阐明一下吗? (I'm far from being an expert in XML-related stuff)... (我远不是 XML 相关的专家)...

I'm using Spring Boot 1.4.4.RELEASE version with Java 7.我正在使用 Spring Boot 1.4.4.RELEASE 版本和 Java 7。

The xs:sequence within a xs:complexType defines a specific order in which an elements children must occur. xs:sequence xs:complexType中的 xs:sequence 定义了子元素必须出现的特定顺序。 To create a list of elements you simply use the minOccurs and maxOccurs directly on the xs:element tag you want repeated, as follows:要创建元素列表,您只需在要重复的xs:element标签上直接使用minOccursmaxOccurs ,如下所示:

<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>

This should create the class you expect and require XML such as the following (order of tags matter):这应该创建您期望的 class 并需要 XML ,如下所示(标签的顺序很重要):

<myClass>
  <list1>a</list1>
  <list1>b</list1>
  <list2>y</list2>
  <list2>z</list2>
  <date>2019-06-26T00:00:00.0000000Z</date>
</myClass>

Placing minOccurs and maxOccurs on the xs:sequence tag requires the entire sequence of elements to be repeated.minOccursmaxOccurs放在xs:sequence标记上需要重复整个元素序列。

I've solved it by myself.我已经自己解决了。 Here's the XSD:这是 XSD:

<xs:element name="myClass">
  <xs:complexType>
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="list1" type="xs:string"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="list2" type="xs:string"/>
      <xs:element name="date" nillable="true" type="xs:dateTime"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM