我遇到了xsd架构的问题。我定义了以下架构:
<xs:element name="nodes" type="nodesRootType" />
<xs:complexType name="nodesRootType">
<xs:sequence minOccurs="1" maxOccurs="unbounded">
<xs:element name="node" type="nodeType" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="nodeType">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="node" type="nodeType" />
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required" />
</xs:complexType>
我正在按照xml:
进行测试<label name="Label_6" >
<label name="Label_7" />
</label>
<label name="Label_8" />
我得到的错误是:
cvc-complex-type.2.4.a: Invalid content
was found starting with element 'node'. One of '{node}' is expected.
我在这里错过了什么。任何帮助都是值得欣赏的。
最佳, 约瑟夫
答案 0 :(得分:3)
您要验证的单个XML文档不能有多个根。它必须有一个根。你的XML:
<label name="Label_6">
<label name="Label_7"/>
</label>
<label name="Label_8"/>
有两个根,因为根级别有两个“label
”元素。此外,您的架构没有定义任何名为“label
”的元素,所以我很困惑。您可能需要一个可以验证类似以下XML的模式:
<labels>
<label name="Label_6">
<label name="Label_7"/>
</label>
<label name="Label_8"/>
</labels>
这里你有一个根“labels
”。请注意,您在层次结构中的不同级别具有相同名称的元素“label
”。这不是verboten(例如,参见xhtml,你可以在div
里面有一个div
......)但这可能令人困惑。对于上面显示的示例XML,请尝试类似以下的模式:
<xs:element name="labels">
<xs:complexType>
<xs:sequence>
<xs:element ref="label" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="labelType">
<xs:sequence>
<xs:element ref="label" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
<xs:element name="label" type="labelType"/>