2012-07-23 16 views
9

Ich habe eine Methode in einer C# -App, die eine XML-Benutzereingabedatei anhand einer eingebetteten XSD überprüft. Es funktioniert gut, aber es erfordert, dass alle untergeordneten Elemente in der genauen Reihenfolge in der XSD definiert sind. Für mich spielt die Reihenfolge keine Rolle, solange die Elemente existieren.Überprüfen Sie XML auf XSD und ignorieren Sie die Reihenfolge der untergeordneten Elemente.

Zum Beispiel, wenn ich hatte die folgende 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> 

Und ein XML so ...

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

Wenn ich es bestätigt würde ich einen Fehler, weil die Kinderelemente sind außer Betrieb.

Kann ich einige Änderungen am XSD vornehmen, so dass die Validierung nur dann wichtig ist, wenn die Elemente vorhanden sind und dass sie sich unter dem richtigen Elternteil befinden, aber nicht in welcher Reihenfolge?

Antwort

20

Sequenz bedeutet, die Elemente müssen in der bestimmten Reihenfolge erscheinen. Wahrscheinlich willst du xs: all. Werfen Sie einen Blick auf http://www.w3schools.com/xml/schema_complex_indicators.asp

+0

Danke, das ist die Antwort. Mein XSD wurde für mich von VS generiert, also hatte es alle untergeordneten Elemente unter einem Sequenz-Tag. – Jim

+1

Punkt zu merken ist, dass xs: all nur eine maxOccurs von 1 unterstützt und nicht mehr als das. Dies wurde jedoch im XSD 1.1-Prozessor aufgehoben, der sich noch im Beta-Stadium befindet. – vanval

+0

Haben sie jemals 1.1 veröffentlicht? – ppumkin

Verwandte Themen