Ich habe eine XML-Datei mit einem angegebenen Schema-Speicherort wie dem folgenden:
xsi:schemaLocation="someurl ..\localSchemaPath.xsd"
Ich möchte in C # validieren. Wenn ich die Datei in Visual Studio öffne, wird sie anhand des Schemas überprüft und die Fehler werden perfekt aufgelistet. Irgendwie kann ich es jedoch nicht automatisch in C # validieren, ohne das Schema anzugeben, gegen das validiert werden soll:
XmlDocument asset = new XmlDocument();
XmlTextReader schemaReader = new XmlTextReader("relativeSchemaPath");
XmlSchema schema = XmlSchema.Read(schemaReader, SchemaValidationHandler);
asset.Schemas.Add(schema);
asset.Load(filename);
asset.Validate(DocumentValidationHandler);
Sollte ich nicht in der Lage sein, automatisch mit dem in der XML-Datei angegebenen Schema zu validieren? Was vermisse ich ?
Antworten:
Sie müssen eine XmlReaderSettings-Instanz erstellen und diese beim Erstellen an Ihren XmlReader übergeben. Anschließend können Sie die
ValidationEventHandler
in den Einstellungen abonnieren , um Validierungsfehler zu erhalten. Ihr Code sieht am Ende folgendermaßen aus:quelle
using
Klausel der Vollständigkeitsettings.ValidationEventHandler += (o, args) => { errors = true; // More code };
Eine einfachere Möglichkeit, wenn Sie .NET 3.5 verwenden, ist die Verwendung
XDocument
undXmlSchemaSet
Validierung.Weitere Unterstützung finden Sie in der MSDN-Dokumentation .
quelle
<catalog><![CDATA[my <i> new </i> catalog....]]></catalog>
ist der richtige Weg, das zu tun.Das folgende Beispiel validiert eine XML-Datei und generiert den entsprechenden Fehler oder die entsprechende Warnung.
Im vorhergehenden Beispiel werden die folgenden Eingabedateien verwendet.
books.xsd
quelle
persönlich bevorzuge ich die Validierung ohne Rückruf:
(Siehe Timiz0rs Beitrag in Synchronous XML Schema Validation? .NET 3.5 )
quelle
Ich hatte diese Art der automatischen Validierung in VB durchgeführt und so habe ich es gemacht (konvertiert in C #):
Dann habe ich das
settings.ValidationEventHandler
Ereignis beim Lesen der Datei abonniert .quelle