如何指定DONT需要按顺序排列的所需xml子元素列表?

时间:2010-11-29 14:53:34

标签: c# xml xsd xml-validation

以下xml针对提供的xsd文档进行验证。但是,当我开始从xml中删除元素时,它仍然会进行STILL验证!?

如何编写强制包含元素的xsd?

<?xml version="1.0" encoding="UTF-8"?>
<Video>
  <Title>
  </Title>
  <Description>
  </Description>
  <Contributor>
  </Contributor>
  <Subject>
  </Subject>
</Video>

然后我有xsd:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="UploadXSD"
    targetNamespace="http://tempuri.org/UploadXSD.xsd"
    elementFormDefault="qualified"
    xmlns="http://tempuri.org/UploadXSD.xsd"
    xmlns:mstns="http://tempuri.org/UploadXSD.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="Video">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Title" minOccurs="1" type="xs:string"></xs:element>
        <xs:element name="Description" minOccurs="1" type="xs:string"></xs:element>
        <xs:element name="Contributor" minOccurs="1" type="xs:string"></xs:element>
        <xs:element name="Subject" minOccurs="1" type="xs:string"></xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

</xs:schema>

2 个答案:

答案 0 :(得分:4)

如果您使用xs:all而不是xs:sequence,则元素可能以任何顺序出现。还有一些额外的限制 - 例如,使用all无法多次指定元素(我不确定您是否打算使用该模式,您的模式当前会允许这样做。)

答案 1 :(得分:1)

xsd中的targetNamespace应该与您要验证的xml的名称空间匹配,即

<Video xmlns="http://tempuri.org/UploadXSD.xsd">
  <Title>
  </Title>
  <Description>
  </Description>
  <Contributor>
  </Contributor>
  <Subject>
  </Subject>
</Video>