根据XSD验证XML并忽略子元素的顺序

Jim*_*Jim 13 c# xml validation xsd

我在C#应用程序中有一个方法,可以针对嵌入式XSD验证用户输入XML文件.它工作正常,但它要求所有子元素都按照XSD中定义的确切顺序.但对我而言,只要元素存在,顺序就无关紧要了.

例如,如果我有以下XSD ...

<xs:element maxOccurs="unbounded" name="ParentElement">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="FirstChildElement" type="xs:string" />
      <xs:element name="SecondChildElement" type="xs:string" />
      <xs:element name="ThirdChildElement" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)

像这样的XML ......

<ParentElement>
    <FirstChildElement>someValue</FirstChildElement>        
    <ThirdChildElement>someValue</ThirdChildElement>
    <SecondChildElement>someValue</SecondChildElement>
</ParentElement>
Run Code Online (Sandbox Code Playgroud)

如果我验证它,我会收到一个错误,因为子元素出现故障.

我可以对XSD进行一些更改,因此验证只关注元素是否存在,并且它们是否在正确的父级下,而不是它们所处的顺序?

小智 24

顺序意味着,元素必须以特定顺序出现.你可能想要xs:all.请查看http://www.w3schools.com/xml/schema_complex_indicators.asp

  • 需要记住的一点是,xs:all 仅支持 maxOccurs 为 1,且不能超过该值。然而,这一问题在 XSD 1.1 处理器中得到了提升,该处理器仍处于测试阶段。 (2认同)