Валидация XML (CommerceML) по XSD - C#

Узнай цену своей работы

Формулировка задачи:

Всем добрый день, вечер, ночь. Закопался с одной проблемкой, очень нужна помощь. Задача простая, провести валидацию XML файла в формате CommerceML по его схеме (XSD). Файл XML: modaleto.rar Файл XSD: commerceml.rar Даю ссылки, т. к. файлы большие. Код на C#:
using System;
using System.Xml;
using System.Xml.Schema;
using System.IO;
 
public class Sample
{
    public static void Main()
    {
 
        // Create the XmlSchemaSet class.
        XmlSchemaSet sc = new XmlSchemaSet();
 
        // Add the schema to the collection.
        sc.Add( "urn:1C.ru:commerceml_2", @"C:\TestXML\commerceml.xsd" );
 
        // Set the validation settings.
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.ValidationType = ValidationType.Schema;
        settings.Schemas = sc;
        settings.ValidationEventHandler += new ValidationEventHandler( ValidationCallBack );
 
        // Create the XmlReader object.
        XmlReader reader = XmlReader.Create( @"C:\TestXML\modaleto.xml", settings );
 
        // Parse the file. 
        while ( reader.Read() )
            ;
 
        Console.WriteLine( "Нажмите любую клавишу..." );
        Console.ReadKey();
    }
 
    // Display any validation errors.
    private static void ValidationCallBack( object sender, ValidationEventArgs e )
    {
        Console.WriteLine( "Validation Error: {0}", e.Message );
    }
}
В целом код рабочий и не находит ни каких ошибок, только он не находит ошибок вообще ни когда. Как бы я не менял XML файл он всё равно проходит валидацию. К примеру, я вместо элемента "Контрагент" пишу "Контрагенттт" и он это хавает. Ни как не пойму в чём дело...

Решение задачи: «Валидация XML (CommerceML) по XSD»

textual
Листинг программы
using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;
 
public class Sample
{
 
    private Boolean m_success = true;
 
    public Sample()
    {
        //Validate the document using an external XSD schema.  Validation should fail.
        Validate( @"C:\TestXML\notValidXSD.xml" );
 
        //Validate the document using an inline XSD. Validation should succeed.
        Validate( @"C:\TestXML\inlineXSD.xml" );
    }
 
    public static void Main()
    {
        Sample validation = new Sample();
 
        Console.ReadKey();
    }
 
    private void Validate( String filename )
    {
        m_success = true;
        Console.WriteLine( "\r\n******" );
        Console.WriteLine( "Validating XML file " + filename.ToString() );
        XmlTextReader txtreader = new XmlTextReader( filename );
        XmlValidatingReader reader = new XmlValidatingReader( txtreader );
 
        // Set the validation event handler
        reader.ValidationEventHandler += new ValidationEventHandler( ValidationCallBack );
 
        // Read XML data
        while ( reader.Read() ) { }
        Console.WriteLine( "Validation finished. Validation {0}", (m_success == true ? "successful!" : "failed.") );
 
        //Close the reader.
        reader.Close();
    }
 
    //Display the validation error.
    private void ValidationCallBack( object sender, ValidationEventArgs args )
    {
        m_success = false;
        Console.WriteLine( "\r\n\tValidation error: " + args.Message );
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5