2012-07-23 107 views
9

我在C#應用程序中有一個方法,該方法根據嵌入式XSD驗證用戶輸入XML文件。它工作得很好,但它要求所有的子元素都按XSD中定義的順序排列。對我來說,只要元素存在,順序並不重要。根據XSD驗證XML並忽略子元素的順序

舉例來說,如果我有以下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> 

而且像這樣的XML ...

<ParentElement> 
    <FirstChildElement>someValue</FirstChildElement>   
    <ThirdChildElement>someValue</ThirdChildElement> 
    <SecondChildElement>someValue</SecondChildElement> 
</ParentElement> 

如果我驗證它,我會得到,因爲一個錯誤子元素失靈。

是否可以對XSD進行一些更改,以便驗證只關心元素是否存在,以及它們是否在正確的父級下,但不是它們的順序?

回答

20

序列表示元素必須以特定順序出現。你可能想要xs:all。看看http://www.w3schools.com/xml/schema_complex_indicators.asp

+0

謝謝,這就是答案。我的XSD是由VS爲我生成的,所以它擁有Sequence標籤下的所有子元素。 – Jim 2012-07-23 21:42:37

+1

要記住的一點是,xs:全部只支持maxOccurs爲1且不超過1。但是,XSD 1.1處理器仍然處於測試階段,但這已經取消。 – vanval 2014-06-12 19:45:43

+0

他們有沒有發佈1.1? – ppumkin 2014-10-09 14:25:33