Xml xsd模式验证

Xml xsd模式验证,xml,validation,xsd,schema,Xml,Validation,Xsd,Schema,我对xsd模式有问题。我定义了以下模式: <xs:element name="nodes" type="nodesRootType" /> <xs:complexType name="nodesRootType"> <xs:sequence minOccurs="1" maxOccurs="unbounded"> <xs:element name="node" type="nodeType" /> </xs:

我对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>
我错过了什么。非常感谢您的帮助

最好的,
Jozef

正在验证的单个XML文档不能有多个根。它必须有一个根。您的XML:

<label name="Label_6">
    <label name="Label_7"/>
</label>
<label name="Label_8"/>
这里有一个根“
标签”
”。请注意,在层次结构的不同级别上有同名的元素“
label
”。这不是verboten(例如,请参见xhtml,在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"/>

正在验证的单个XML文档不能有多个根。它必须有一个根。您的XML:

<label name="Label_6">
    <label name="Label_7"/>
</label>
<label name="Label_8"/>
这里有一个根“
标签”
”。请注意,在层次结构的不同级别上有同名的元素“
label
”。这不是verboten(例如,请参见xhtml,在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"/>


您可能想编辑您的问题,我看不到架构或xml。我已更新了答案。我可以正确地序列化所需格式的XML。修复有两个部分:1)将maxOccurs和minOccurs移动到正确的位置,2)在一个位置分别定义元素,因此两个架构位置的元素类型显然相同。您可能需要编辑您的问题,我看不到架构或xml。我已更新了答案。我可以正确地序列化所需格式的XML。修复有两个部分:1)将maxOccurs和minOccurs移动到正确的位置,2)在一个位置分别定义元素,因此两个模式位置的元素类型显然相同。是的,我将xml示例从上下文中删除。对不起。你是对的,我想验证你写的东西。您说过我在模式中没有'label'元素。您能为上面提到的xml提供一个模式示例吗?非常感谢。这是同样的错误。我通过试验发现,如果我用in“recursive”complexType定义替换,它会工作。。。我只是不知道为什么…我发现了你的问题。minOccurs和maxOccurs位于错误的位置。查看我上面的编辑。有了这个模式和示例XML,我能够正确地序列化和反序列化?是否可以使用模式检查一些唯一的约束?假设我想要一个label元素的name属性,一个跨整个xml的唯一名称。可能吗?提前感谢。@Jozef:是的,使用xs:unique要求值的唯一性。是的,我把xml示例从上下文中删掉了。对不起。你是对的,我想验证你写的东西。您说过我在模式中没有'label'元素。您能为上面提到的xml提供一个模式示例吗?非常感谢。这是同样的错误。我通过试验发现,如果我用in“recursive”complexType定义替换,它会工作。。。我只是不知道为什么…我发现了你的问题。minOccurs和maxOccurs位于错误的位置。查看我上面的编辑。有了这个模式和示例XML,我能够正确地序列化和反序列化?是否可以使用模式检查一些唯一的约束?假设我想要一个label元素的name属性,一个跨整个xml的唯一名称。可能吗?提前感谢。@Jozef:是的,使用xs:unique要求值的唯一性。退房
<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"/>