如果您有权访问并且可以修改 XSD。对我来说,当我使用 IDEA 从 XML 生成 XSD 时,这个问题就会出现。
有了这个 xml:
<?xml version="1.0"?>
<schema>
<element name="foo" type="bar" />
<complexType name="bar" />
</schema>
IDEA 会生成这样的 XSD,而 JAXB 不会生成根元素:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="schema" type="schemaType"/>
<xs:complexType name="schemaType">
<xs:sequence>
<xs:element type="elementType" name="element"/>
<xs:element type="complexTypeType" name="complexType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="elementType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="name"/>
<xs:attribute type="xs:string" name="type"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="complexTypeType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="name"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:schema>
但是,如果您以这种方式修改 XSD(修改根元素“模式”以获取标签 xs:element 内的 xs:complexType):
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="schema">
<xs:complexType>
<xs:sequence>
<xs:element type="elementType" name="element"/>
<xs:element type="complexTypeType" name="complexType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="schemaType">
<xs:sequence>
<xs:element type="elementType" name="element"/>
<xs:element type="complexTypeType" name="complexType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="elementType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="name"/>
<xs:attribute type="xs:string" name="type"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="complexTypeType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="name"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:schema>
JAXB 将生成根元素!