2010-03-09 5 views
6

In C#/.NET 2.0, wenn ich serialize ein Objekt mit XmlSerializer, was ist der einfachste Weg, um die Ausgabe gegen ein XML-Schema zu validieren?Wie kann ich die Ausgabe von XmlSerializer überprüfen?

Das Problem ist, dass es zu einfach ist, ungültiges XML mit dem XmlSerializer zu schreiben, und ich kann keine Möglichkeit finden, das XML zu überprüfen, das nicht umständlich aussieht. Idealerweise würde ich erwarten, das Schema im XmlSerializer zu setzen oder einen XmlWriter zu haben, der validiert.

+0

In .NET 4 gibt es Ereignisse, um unerwartete Elemente zu erfassen. –

Antwort

4

Was es wieder über das Lesen eines Validieren Leser

Hier ist ein kurzer Stich mit daran

Stream stream = new MemoryStream(Encoding.UTF8.GetBytes("<YourXml />")); 
var input = mappingAssembly.GetManifestResourceStream(
      "MySchema.xsd" 
      ); //This could be whatever resource your schema is   
var schemas = new XmlSchemaSet();    
schemas.Add(
    "urn:YourSchemaUrn", 
    XmlReader.Create(
     input 
    ) 
); 

var settings = new XmlReaderSettings 
          { 
           ValidationType = ValidationType.Schema, 
           Schemas = schemas 
          }; 

settings.ValidationEventHandler += MakeAHandlerToHandleAnyErrors; 

var reader = XmlReader.Create(stream, settings); 
while (reader.Read()) {} //Makes it read to the end, therefore validates 

Sie werden einige Handler haben müssen, etwas zu tun, wenn es Fehler gibt.

0

Sie könnten XmlReader verwenden, um eine XML-Datei anhand eines XSD-Schemas zu validieren.

+1

Wahr, aber das bedeutet, dass ich das XML schreiben, irgendwo speichern und wieder lesen muss. Ich hatte gehofft, dass es einen einfacheren Weg gibt, es während der Fahrt zu machen. –

+0

XmlSerializer unterstützt nicht die Validierung gegen ein XSD-Schema, da es das XML von einem Objekt generieren soll, das immer gültig sein sollte. –

+0

Das ist jedoch nicht der Fall. Es scheint, dass erforderliche Elemente weggelassen werden, wenn ihr Wert null ist. Und es gibt wahrscheinlich andere Dinge, die von XmlSerializer nicht unterstützt werden (Längen- und Musterbeschränkungen für Strings, Eindeutigkeit, Schlüsselreferenzen). –

Verwandte Themen