我使用JAXB将XSD架构绑定到POCO。我尝试了两种不同的方法来编写XSD架构,但每种方法都有一个缺陷:
选项1问题:每个元素都用XML中的<Elements>
表示,而不是<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");
Marshaled 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");
Marshaled XML
<Root>
<Elements>
<Element>Str1</Element>
<Element>Str2</Element>
</Elements>
</Root>
问题:有没有办法编写输出XML的模式,如选项2 ,其代码的编写方式与选项1
编辑: <xs:list>
不是选项,因为元素可能包含空格。
答案 0 :(得分:1)
从Java类开始
如果从Java对象开始,可以使用@XmlElementWrapper
注释添加分组元素。
@XmlElementWrapper(name="Elements")
@XmlElement(name="Element)
public List<Element> getElements() {
return elements;
}
从XML架构开始
XJC工具非常易于扩展。为XJC工具编写的以下插件似乎允许您在模型中生成@XmlElementWrapper
注释。