11
votes

Possible de valider XML contre XSD à l'aide du code au moment de l'exécution?

J'ai des fichiers XML que j'ai lu au moment de l'exécution, est disponible pour valider le XML contre un fichier XSD au moment de l'exécution? en utilisant c #


0 commentaires

3 Réponses :


15
votes

Essayez ceci:

public void ValidateXmlDocument(
    XmlReader documentToValidate, string 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);
}


1 commentaires

C'est le plus rapide, j'ai utilisé.



5
votes

J'ai aussi du code! J'utilise cela dans mes tests: xxx

celui-ci prend les schémas en tant que chaînes (ressources de fichier dans l'assemblage) et les ajoute à un schéma. Je valide et si ce n'est pas valide, je retourne faux.

Si le XML n'est pas invalide, je vérifie un contrôle négatif pour vous assurer que mes schémas ne sont pas bousillés. Ce n'est pas garanti infespatial, mais j'ai utilisé cela pour trouver des erreurs dans mes schémas.


1 commentaires

Vous voudrez peut-être essayer d'utiliser la méthode xmlschema.read>, car elle peut valider le schéma tout en l'analysant.



3
votes

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 StringReader(document.InnerXml), Xsettings);


            while (reader.Read());
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message.ToString());
        }


0 commentaires