2012-07-23 39 views
9

Tôi có một phương thức trong ứng dụng C# xác nhận tệp XML đầu vào của người dùng dựa vào XSD được nhúng. Nó hoạt động tốt, nhưng nó đòi hỏi tất cả các phần tử con phải theo thứ tự chính xác được định nghĩa trong XSD. Với tôi, thứ tự không quan trọng miễn là các yếu tố tồn tại.Xác thực XML dựa vào XSD và bỏ qua thứ tự các phần tử con

Ví dụ, nếu tôi đã có XSD sau ...

<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> 

Và một XML như thế này ...

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

Nếu tôi xác nhận nó, tôi muốn nhận được một lỗi vì các phần tử con không hoạt động.

Tôi có thể thực hiện một số thay đổi đối với XSD để xác thực chỉ quan tâm nếu các phần tử tồn tại và chúng nằm trong đúng cấp độ gốc chứ không phải thứ tự của chúng?

Trả lời

20

Trình tự có nghĩa là các phần tử phải xuất hiện theo thứ tự cụ thể. Bạn có thể muốn xs: all. Hãy xem http://www.w3schools.com/xml/schema_complex_indicators.asp

+0

Cảm ơn, đó là câu trả lời. XSD của tôi đã được tạo ra cho tôi bởi VS, vì vậy nó có tất cả mọi thứ các phần tử con trong một thẻ Sequence. – Jim

+1

Điểm cần nhớ là xs: tất cả chỉ hỗ trợ maxOccurs là 1 và không nhiều hơn thế. Tuy nhiên điều này đã được nâng lên trong bộ xử lý XSD 1.1, mà vẫn còn ở giai đoạn beta. – vanval

+0

Họ đã từng phát hành phiên bản 1.1 chưa? – ppumkin

Các vấn đề liên quan