gpt4 book ai didi

xml - XSD - 元素嵌套在同名元素中 - 是否合适?

转载 作者:数据小太阳 更新时间:2023-10-29 02:24:17 24 4
gpt4 key购买 nike

主题中的问题:在 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>

如果是这样,你如何让 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>

但它无法编译,因为 Java 不允许声明与外部类同名的内部类。尝试使用 xjc 绑定(bind)或内联模式注释更改生成的类型名称。你可以找到例子 here .

示例内联绑定(bind):

...
<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>
...

关于xml - XSD - 元素嵌套在同名元素中 - 是否合适?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14061007/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com