Possible de valider xml contre xsd en utilisant du code lors de l’exécution?

J’ai des fichiers XML que j’ai lus au moment de l’exécution, est-il possible de valider le XML avec un fichier xsd au moment de l’exécution? en utilisant c #

Essaye ça:

public void ValidateXmlDocument( XmlReader documentToValidate, ssortingng schemaPath) { XmlSchema schema; using (var schemaReader = XmlReader.Create(schemaPath)) { schema = XmlSchema.Read(schemaReader, ValidationEventHandler); } var schemas = new XmlSchemaSet(); schemas.Add(schema); var settings = new XmlReaderSettings(); settings.ValidationType = ValidationType.Schema; settings.Schemas = schemas; settings.ValidationFlags = XmlSchemaValidationFlags.ProcessIdentityConstraints | XmlSchemaValidationFlags.ReportValidationWarnings; settings.ValidationEventHandler += ValidationEventHandler; using (var validationReader = XmlReader.Create(documentToValidate, settings)) { while (validationReader.Read()) { } } } private static void ValidationEventHandler( object sender, ValidationEventArgs args) { if (args.Severity == XmlSeverityType.Error) { throw args.Exception; } Debug.WriteLine(args.Message); } 

J’ai aussi le code! Je l’utilise dans mes tests:

  public static bool IsValid(XElement element, params ssortingng[] schemas) { XmlSchemaSet xsd = new XmlSchemaSet(); XmlReader xr = null; foreach (ssortingng s in schemas) { // eh, leak 'em. xr = XmlReader.Create( new MemoryStream(Encoding.Default.GetBytes(s))); xsd.Add(null, xr); } XDocument doc = new XDocument(element); var errored = false; doc.Validate(xsd, (o, e) => errored = true); if (errored) return false; // If this doesn't fail, there's an issue with the XSD. XNamespace xn = XNamespace.Get( element.GetDefaultNamespace().NamespaceName); XElement fail = new XElement(xn + "omgwtflolj/k"); fail.SetAtsortingbuteValue("xmlns", xn.NamespaceName); doc = new XDocument(fail); var fired = false; doc.Validate(xsd, (o, e) => fired = true); return fired; } 

Celui-ci prend les schémas sous forme de chaînes (ressources de fichiers dans l’assembly) et les ajoute à un jeu de schémas. Je valide et si ce n’est pas valide, je retourne faux.

Si le code XML n’est pas invalide, je vérifie par un négatif que mes schémas ne sont pas foutus. Ce n’est pas garanti à toute épreuve, mais j’ai utilisé cela pour trouver des erreurs dans mes schémas.

solution plus simple ..

  try { XmlReaderSettings Xsettings = new XmlReaderSettings(); Xsettings.Schemas.Add(null, "personDivideSchema.xsd"); Xsettings.ValidationType = ValidationType.Schema; XmlDocument document = new XmlDocument(); document.Load("person.xml"); XmlReader reader = XmlReader.Create(new SsortingngReader(document.InnerXml), Xsettings); while (reader.Read()); } catch (Exception e) { Console.WriteLine(e.Message.ToSsortingng()); } 

J’espère que ce lien aide:

Validation de XML avec XSD