主题中的问题:在XSD中定义嵌套在同名元素中的元素是否有效?
例如,以下代码段是否正确?
<xs:element name="TypeOfAction" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="TypeOfAction" minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="code" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)
如果是这样,你如何使xjc正确生成类?我得到了类似静态类的编译错误TypeOfAction(基本上我会得到两个生成相同名称的嵌套静态类).
片段很好.只有全局元素需要具有唯一限定名称(命名空间和本地名称的组合).
来自JDK 7的XJC可以正常使用您的代码段.我的示例XSD生成了正确的类.
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="SomeType">
<xs:sequence>
<xs:element name="TypeOfAction" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="TypeOfAction"
minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="code"
type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
但它不能编译,因为Java不允许声明与外部类同名的内部类.尝试使用xjc绑定或内联架构注释更改生成的类型名称.你可以在这里找到例子.
内联绑定示例:
...
<xs:element name="TypeOfAction"
minOccurs="0">
<xs:complexType>
<xs:annotation>
<xs:appinfo>
<jaxb:class name="InnerTypeOfAction" />
</xs:appinfo>
</xs:annotation>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="code"
type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2651 次 |
| 最近记录: |