Как проверить XML-документ на соответствие встроенному XSD?

#c# #xml #xsd

#c# #xml #xsd

Вопрос:

Я пишу программу проверки XML, но везде, где я читал, есть только примеры, где вы должны выбрать расположение схемы «name.xsd» и targetlocation… Я хочу, чтобы эта программа автоматически находила это местоположение в XML. Нужно ли мне писать самостоятельную программу или я должен написать программу чтения Xml, которая будет читать до тех пор, пока не найдет местоположение .xsd в XML в теге «schemalocation»? Вот мой код для этого.

 using System;
using System.Xml;
using System.Xml.Schema;
using System.Xml.XPath;
using System.IO;

class XPathValidation
{
    static void Main()
    {

        XmlTextReader reader = new XmlTextReader(@"C:UsersgrishDesktopCorrect Xml.xml");
        XmlDocument doc = new XmlDocument();
        doc.Load(reader);
        reader.Close();
        XmlElement root = doc.DocumentElement;

        XmlNode schemaLocationAttribute = root.SelectSingleNode("//@*[local-name()='schemaLocation']");

        string[] components = schemaLocationAttribute.Value.Split(null);


        //----------------------------------

        bool validated = false;

        try
        {
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.Schemas.Add(components[2], components[3]);
            settings.ValidationType = ValidationType.Schema;

            XmlReader reader1 = XmlReader.Create(@"C:UsersgrishDesktopCorrect Xml.xml", settings);
            XmlDocument document = new XmlDocument();
            document.Load(reader1);

            ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationEventHandler);

            // the following call to Validate succeeds.
            document.Validate(eventHandler);
            validated = true;
            // Parse the file.
            while (reader1.Read());
            Console.WriteLine("Everything is okay!!");
        }
        catch (XmlException e)
        {
            //  load or parse error in the XML
            Console.WriteLine(e.Message);
            validated = false;
        }
        catch (XmlSchemaValidationException e)
        {
            //  Validation failure in XML
            Console.WriteLine(e.Message);
            validated = false;
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
            validated = false;
        }

        



    }
    static void ValidationEventHandler(object sender, ValidationEventArgs e)
    {
        switch (e.Severity)
        {
            case XmlSeverityType.Error:
                Console.WriteLine("Error: {0}", e.Message);
                break;
            case XmlSeverityType.Warning:
                Console.WriteLine("Warning {0}", e.Message);
                break;
        }
    }



}
  

Комментарии:

1. Опция ValidationType . Схема автоматически проверит схемы URL, поэтому вам не нужно добавлять эти схемы.