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

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

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

Всем добрый день, вечер, ночь. Закопался с одной проблемкой, очень нужна помощь. Задача простая, провести валидацию XML файла в формате CommerceML по его схеме (XSD). Файл XML: modaleto.rar Файл XSD: commerceml.rar Даю ссылки, т. к. файлы большие. Код на C#:
Листинг программы
  1. using System;
  2. using System.Xml;
  3. using System.Xml.Schema;
  4. using System.IO;
  5. public class Sample
  6. {
  7. public static void Main()
  8. {
  9. // Create the XmlSchemaSet class.
  10. XmlSchemaSet sc = new XmlSchemaSet();
  11. // Add the schema to the collection.
  12. sc.Add( "urn:1C.ru:commerceml_2", @"C:\TestXML\commerceml.xsd" );
  13. // Set the validation settings.
  14. XmlReaderSettings settings = new XmlReaderSettings();
  15. settings.ValidationType = ValidationType.Schema;
  16. settings.Schemas = sc;
  17. settings.ValidationEventHandler += new ValidationEventHandler( ValidationCallBack );
  18. // Create the XmlReader object.
  19. XmlReader reader = XmlReader.Create( @"C:\TestXML\modaleto.xml", settings );
  20. // Parse the file.
  21. while ( reader.Read() )
  22. ;
  23. Console.WriteLine( "Нажмите любую клавишу..." );
  24. Console.ReadKey();
  25. }
  26. // Display any validation errors.
  27. private static void ValidationCallBack( object sender, ValidationEventArgs e )
  28. {
  29. Console.WriteLine( "Validation Error: {0}", e.Message );
  30. }
  31. }
В целом код рабочий и не находит ни каких ошибок, только он не находит ошибок вообще ни когда. Как бы я не менял XML файл он всё равно проходит валидацию. К примеру, я вместо элемента "Контрагент" пишу "Контрагенттт" и он это хавает. Ни как не пойму в чём дело...

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

textual
Листинг программы
  1. using System;
  2. using System.IO;
  3. using System.Xml;
  4. using System.Xml.Schema;
  5.  
  6. public class Sample
  7. {
  8.  
  9.     private Boolean m_success = true;
  10.  
  11.     public Sample()
  12.     {
  13.         //Validate the document using an external XSD schema.  Validation should fail.
  14.         Validate( @"C:\TestXML\notValidXSD.xml" );
  15.  
  16.         //Validate the document using an inline XSD. Validation should succeed.
  17.         Validate( @"C:\TestXML\inlineXSD.xml" );
  18.     }
  19.  
  20.     public static void Main()
  21.     {
  22.         Sample validation = new Sample();
  23.  
  24.         Console.ReadKey();
  25.     }
  26.  
  27.     private void Validate( String filename )
  28.     {
  29.         m_success = true;
  30.         Console.WriteLine( "\r\n******" );
  31.         Console.WriteLine( "Validating XML file " + filename.ToString() );
  32.         XmlTextReader txtreader = new XmlTextReader( filename );
  33.         XmlValidatingReader reader = new XmlValidatingReader( txtreader );
  34.  
  35.         // Set the validation event handler
  36.         reader.ValidationEventHandler += new ValidationEventHandler( ValidationCallBack );
  37.  
  38.         // Read XML data
  39.         while ( reader.Read() ) { }
  40.         Console.WriteLine( "Validation finished. Validation {0}", (m_success == true ? "successful!" : "failed.") );
  41.  
  42.         //Close the reader.
  43.         reader.Close();
  44.     }
  45.  
  46.     //Display the validation error.
  47.     private void ValidationCallBack( object sender, ValidationEventArgs args )
  48.     {
  49.         m_success = false;
  50.         Console.WriteLine( "\r\n\tValidation error: " + args.Message );
  51.     }
  52. }

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут