Валидация XML (CommerceML) по XSD - C#
Формулировка задачи:
Всем добрый день, вечер, ночь. Закопался с одной проблемкой, очень нужна помощь.
Задача простая, провести валидацию XML файла в формате CommerceML по его схеме (XSD).
Файл XML:
modaleto.rar
Файл XSD:
commerceml.rar
Даю ссылки, т. к. файлы большие.
Код на C#:
В целом код рабочий и не находит ни каких ошибок, только он не находит ошибок вообще ни когда. Как бы я не менял XML файл он всё равно проходит валидацию. К примеру, я вместо элемента "Контрагент" пишу "Контрагенттт" и он это хавает. Ни как не пойму в чём дело...
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 (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 );
}
}