#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, поэтому вам не нужно добавлять эти схемы.