Java 错误s4s att不允许:属性';类型';不能出现在元素';元素';
我有一个需要读取的XML文件,它看起来类似于:Java 错误s4s att不允许:属性';类型';不能出现在元素';元素';,java,xml,jaxb,xjc,Java,Xml,Jaxb,Xjc,我有一个需要读取的XML文件,它看起来类似于: <container time=""> <level1 id="1:0:0" name="Some Name">level1 Description <level2 id="1:1:0" name="Some Name">level2 Description <level3 id="1:1:1" name="Some Name">level3 Description</l
<container time="">
<level1 id="1:0:0" name="Some Name">level1 Description
<level2 id="1:1:0" name="Some Name">level2 Description
<level3 id="1:1:1" name="Some Name">level3 Description</level3>
<level3 id="1:1:2" name="Some Name">level3 Description</level3>
</level2>
</level1>
我遇到的问题是
有一个描述,但它也有0到多个
。如何设置我的模式,以便处理描述
<xs:schema targetNamespace="http://example.com/container" xmlns="http://example.com/container" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="container">
<xs:complexType>
<xs:sequence>
<xs:element ref="level1" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="level1">
<xs:complexType>
<xs:sequence>
<xs:element ref="level2" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string"></xs:attribute>
<xs:attribute name="name" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="level2">
<xs:complexType>
<xs:sequence>
<xs:element ref="level3" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string"></xs:attribute>
<xs:attribute name="name" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="level3">
<xs:complexType>
<xs:attribute name="id" type="xs:string"></xs:attribute>
<xs:attribute name="name" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
例如,当我尝试将type=“xs:string”
添加到任何
时
它抱怨s4s att不允许:属性“type”不能出现在元素“element”中。
错误在于不能将@ref和@type放在同一
元素上
可以是元素声明,在这种情况下,它有@name属性,也可以有@type属性;或者它是对元素声明的引用,在这种情况下,它有一个@ref属性而没有@type。该类型属于元素声明;如果您引用的是在别处声明的元素,那么类型将与该元素声明一起使用,而不是与引用一起使用
level3元素是一个内容简单的复杂类型。您声明它的方式通常是
<xs:element name="level3">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" type="xs:string"></xs:attribute>
<xs:attribute name="name" type="xs:string"></xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
级别1和级别2元素更难。它们同时具有文本节点和元素节点子节点。在XSD中描述这一点的唯一方法是使用“混合内容”类型,但混合内容类型主要是为叙述性文本文档设计的,它们不能约束文本的去向或形式。可能是这样的:
<xs:element name="level2">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element ref="level3" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string"></xs:attribute>
<xs:attribute name="name" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
谢谢你,3级很有魅力。可悲的是,就像你说的,1级和2级很混乱。我以列表内容
结束,描述与子级别混合在一起。
<xs:element name="level2">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element ref="level3" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string"></xs:attribute>
<xs:attribute name="name" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>