这是我的xml模型:
<train xmlns="http://www.example.org/train/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<routes>
<route>Route1</route>
<route>Route2</route>
</routes>
</train>
我想创建一个XSD,它将为我提供以下java:
Train train = new Train();
train.getRoutes().add(new Route());
我尝试了不同的设计,即Venetian Blind,Russian Doll,Salami Slice,但最终结果总是像这样的java:
Train train = new Train();
train.getRoutes().getRoute().add("Route1");
以下是我到目前为止尝试过的xsd文档:
Venetian Blind
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.example.org/train/">
<xs:element xmlns:tra="http://www.example.org/train/" name="train" type="tra:trainType"/>
<xs:complexType name="routesType">
<xs:sequence>
<xs:element type="xs:string" name="route" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="trainType">
<xs:sequence>
<xs:element xmlns:tra="http://www.example.org/train/" type="tra:routesType" name="routes"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
俄罗斯娃娃
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.example.org/train/">
<xs:element name="train">
<xs:complexType>
<xs:sequence>
<xs:element name="routes">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="route" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Salami Slice
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.example.org/train/">
<xs:element name="route" type="xs:string"/>
<xs:element name="routes">
<xs:complexType>
<xs:sequence>
<xs:element xmlns:tra="http://www.example.org/train/" ref="tra:route" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="train">
<xs:complexType>
<xs:sequence>
<xs:element xmlns:tra="http://www.example.org/train/" ref="tra:routes"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
谁能告诉我我做错了什么?
答案 0 :(得分:2)
您很可能需要@XmlElementWrapper
来获得类似
@XmlElementWrapper(name="routes")
@XmlElement(name="route")
List<Route> routes ...;
您可以使用jaxb-xew-plugin来实现此目的。
看到这个答案:
How generate XMLElementWrapper annotation with xjc and customized binding