Java 类到 XSD

标签 java xml jaxb maven-jaxb2-plugin

有人可以告诉我什么 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 相关领域的专家)...

我正在使用 Spring Boot 1.4.4.RELEASE 版本和 Java 7。

最佳答案

xs:complexType 中的 xs:sequence 定义子元素必须出现的特定顺序。要创建元素列表,您只需直接在要重复的 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>

这应该创建您期望的类并需要如下所示的 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 标记上需要重复整个元素序列。

关于Java 类到 XSD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58842818/

相关文章:

java - 当 Java 中的集合超出容量时会发生什么?

java - 编辑 XML 文件无法正常工作

java - 获取 XML 文档中使用的前缀/命名空间绑定(bind),最好使用 org.w3c.dom 和 javax.xml API

java - REST java 中的通用响应处理

java - 在 android 上使用 jackson-dataformat-xml

java - Querydsl 有哪些好的用例?

java - 如何在 JTextArea 周围设置线条边框?

java - JAXB:从 Java 代码更改 XML 元素的名称?

Java MVC - 感觉我不明白

java.net.MalformedURLException : no protocol