当您将 Bars 定义为复杂类型时,Bars 将作为单独的类生成。像这样我发现架构也更容易阅读。除非您将 maxOccurs 更改为大于 1 的值,否则 Bars 不会在 Foo 中列出 - 您不能在 xs:all 上执行此操作,但可以使用 xs:sequence。
...
<xs:complexType name="Foo">
<xs:all>
<xs:element name="Bars" type="Bars" />
</xs:all>
</xs:complexType>
<xs:complexType name="Bars">
<xs:sequence>
<xs:element name="Bar" type="barType" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
...
运行 xjc: Foo.java 后:
...
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Foo", propOrder = {
})
public class Foo {
@XmlElement(name = "Bars", required = true)
protected Bars bars;
public Bars getBars() {
return bars;
}
public void setBars(Bars value) {
this.bars = value;
}
}
酒吧.java:
...
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Bars", propOrder = {
"bar"
})
public class Bars {
@XmlElement(name = "Bar", required = true)
protected List<String> bar;
...
}
使用 xs:seqence 获取 Bars 列表 (maxOccurs="unbounded"): XSD:
...
<xs:complexType name="Foo">
<xs:sequence>
<xs:element name="Bars" type="Bars" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="Bars">
<xs:sequence>
<xs:element name="Bar" type="barType" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
...
Foo.java:
...
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Foo", propOrder = {
"bars"
})
public class Foo {
@XmlElement(name = "Bars", required = true)
protected List<Bars> bars;
public List<Bars> getBars() {
if (bars == null) {
bars = new ArrayList<Bars>();
}
return this.bars;
}
}