2

我使用 JAXB 将 XSD 模式绑定到 POCO。我尝试了两种不同的方法来编写 XSD 架构,但每种方法都有一个缺陷:

选项1

问题:每个元素都用<Elements>XML 而不是 表示<Element>,而且它们不在容器中,例如<ElementsContainer>.

XSD 架构

<xs:element name="Root" type="RootType" />

<xs:complexType name="RootType" />
  <xs:sequence>
    <xs:element name="Elements" type="xs:string" maxOccurs="unbounded"/>
  </xs:sequence>
</xs:complexType>

爪哇

RootType r = new RootType();
r.getElements.add("Str1");
r.getElements.add("Str2");

编组的 XML

<Root>
  <Elements>Str1</Elements> 
  <Elements>Str2</Elements>
</Root>
选项 2

问题:Java 代码看起来更丑。

XSD 架构

<xs:element name="Root" type="RootType" />

<xs:complexType name="RootType" />
  <xs:element name="Elements">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Element" type="xs:string" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:complexType>

爪哇

RootType r = new RootType();
r.getElements().getElement().add("Str1");
r.getElements().getElement().add("Str2");

编组的 XML

<Root>
  <Elements>
    <Element>Str1</Element>
    <Element>Str2</Element>
  </Elements>
</Root>

问题:有没有办法编写一个模式,输出类似于选项 2中的 XML,并且其代码的编写方式类似于选项 1

编辑: <xs:list>不是一个选项,因为元素可能有空格。

4

1 回答 1

1

从 Java 类开始

如果您从 Java 对象开始,您可以使用@XmlElementWrapper注解来添加分组元素。

@XmlElementWrapper(name="Elements")
@XmlElement(name="Element)
public List<Element> getElements() {
    return elements;
}

从 XML 模式开始

XJC 工具具有很强的可扩展性。为 XJC 工具编写的以下插件似乎允许您@XmlElementWrapper在模型中生成注释。

于 2013-03-14T20:15:13.970 回答