我正在尝试反序列化以下XML:
<queries>
<query name='abc'>
<statement>SELECT * FROM table1</statement>
<label row='1' name='id'/>
<label row='2' name='name'/>
</query>
<query name='another'>
<statement>SELECT * FROM table2</statement>
<label row='1' name='myTabID'/>
<label row='2' name='myTabName'/>
</query>
</queries>
验证我正在使用的架构:
<xs:complexType name="Queries">
<xs:sequence>
<xs:element name="query" type="Query"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Query">
<xs:sequence>
<xs:element name="statement" minOccurs="1" maxOccurs="1"/>
<xs:element name="label">
<xs:complexType>
<xs:attribute name="row" type="xs:int" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="name" type="xs:string"/>
</xs:complexType>
验证失败并显示以下消息:
无效。 错误 - 第7行,第48行:org.xml.sax.SAXParseException; lineNumber:7; columnNumber:48; cvc-complex-type.2.4.d:从元素'label'开始发现无效内容。此时不会有子元素。 错误 - 第9,31行:org.xml.sax.SAXParseException; lineNumber:9; columnNumber:31; cvc-complex-type.2.4.d:从元素'query'开始发现无效内容。此时不会有子元素。
我错过了什么?我是否需要指定与序列不同的标签?我想强制执行至少一个查询。
先谢谢你了:))
答案 0 :(得分:3)
错误消息抱怨定义
<xs:element name="label">
和使用
<label row='1' name='id'/>
<label row='2' name='name'/>
minOccurs
和maxOccurs
的{{3}}为1,因此您只能在那里使用一个标签。如果您想使用更多标签,则需要更改它。使用unbounded
任意金额。
另请注意,maxOccurs
需要进行类似的unbounded
调整(1
或大于query
)(由default values (W3)评论)
答案 1 :(得分:0)
试试这个:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="queries">
<xs:complexType>
<xs:sequence>
<xs:element name="query" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="statement"/>
<xs:element name="label" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:int" name="row" use="optional"/>
<xs:attribute type="xs:string" name="name" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:string" name="name" use="optional"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>