internal EbInterfaceResult IsValidInvoice(XmlDocument xDoc, object invoiceType) { XmlValidator xmlValidator = new XmlValidator(); XmlValidator.XmlValidatorResult xmlResult; xmlValidator.SchemaSet = GetXmlSchemas(xDoc); xmlResult = xmlValidator.ValidateXmlDocument(xDoc, ValidationType.Schema, null); EbInterfaceResult ebIResult = new EbInterfaceResult(); if (xmlResult == XmlValidator.XmlValidatorResult.Valid) { ebIResult.ResultType = ResultType.IsValid; } else { ebIResult.ResultType = ResultType.XmlValidationIssue; foreach (var errMsg in xmlValidator.Warnings) { ebIResult.ResultMessages.Add(new ResultMessage() { Field = errMsg.Field, Message = errMsg.Message, Severity = MessageType.Warning }); } foreach (var errMsg in xmlValidator.Errors) { ebIResult.ResultMessages.Add(new ResultMessage() { Field = errMsg.Field, Message = errMsg.Message, Severity = MessageType.Error }); } } return(ebIResult); }
static void Main(string[] args) { for (int i = 0; i < 2; i++) { // Zwei Läufe: der erste mit validen Dateien, der zweite mit invaliden // Der Basis-Dateiname string xmlBaseFileName; if (i == 0) { Console.WriteLine("*** Erster Lauf mit validen Dokumenten ***\r\n"); xmlBaseFileName = Path.Combine( Application.StartupPath, "Valid\\Persons"); } else { Console.WriteLine("\r\n\r\n*** Zweiter Lauf mit invaliden Dokumenten ***\r\n"); xmlBaseFileName = Path.Combine( Application.StartupPath, "Invalid\\Persons"); } // XML-Datei nur auf Wohlgeformtheit validieren Console.WriteLine("XML-Datei nur auf Wohgeformtheit validieren"); ValidateXmlFile(xmlBaseFileName + ".xml", ValidationType.None, null); // XML-Datei (mit internem DTD) automatisch validieren (je nach eingebetteten Informationen) Console.WriteLine(); Console.WriteLine("XML-Datei (mit internem DTD) automatisch validieren (je nach eingebetteten Informationen)"); ValidateXmlFile(xmlBaseFileName + "_Intern_DTD.xml", ValidationType.Auto, null); // XML-Datei gegen ein externes Schema validieren Console.WriteLine(); Console.WriteLine("XML-Datei gegen ein externes Schema validieren"); ValidateXmlFile(xmlBaseFileName + "_Extern_XSD.xml", ValidationType.Schema, xmlBaseFileName + ".xsd"); // XML-Datei gegen ein externes DTD validieren (auf das in der XML-Datei verwiesen wird) Console.WriteLine(); Console.WriteLine("XML-Datei gegen ein externes DTD validieren"); ValidateXmlFile(xmlBaseFileName + "_Extern_DTD.xml", ValidationType.DTD, null); // XML-Datei mit internem DTD gegen ein externes Schema validieren Console.WriteLine(); Console.WriteLine("XML-Datei mit DTD gegen ein externes Schema validieren"); ValidateXmlFile(xmlBaseFileName + "_Intern_DTD.xml", ValidationType.Schema, xmlBaseFileName + ".xsd"); } // Ein XmlDokument überprüfen Console.WriteLine(); Console.WriteLine("XmlDokument überprüfen"); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\" " + "standalone=\"yes\"?><persons></persons>"); XmlNode personNode = xmlDoc.CreateElement("person"); XmlNode node = xmlDoc.CreateElement("firstname"); node.InnerText = "Zaphod"; personNode.AppendChild(node); node = xmlDoc.CreateElement("lastname"); node.InnerText = "Beeblebrox"; personNode.AppendChild(node); node = xmlDoc.CreateElement("type"); node.InnerText = "Alien"; personNode.AppendChild(node); xmlDoc.DocumentElement.AppendChild(personNode); XmlValidator xmlValidator = new XmlValidator(); XmlValidator.XmlValidatorResult result; string schemaFileName = Path.Combine(Application.StartupPath, "Persons.xsd"); try { result = xmlValidator.ValidateXmlDocument(xmlDoc, ValidationType.Schema, schemaFileName); } catch (XmlException ex) { Console.WriteLine(ex.Message); return; } switch (result) { case XmlValidator.XmlValidatorResult.Valid: Console.WriteLine("Das XML-Dokument ist valide."); break; case XmlValidator.XmlValidatorResult.WarningsExists: Console.WriteLine("Das XML-Dokument ist valide, es wurden aber Warnungen gemeldet:"); for (int i = 0; i < xmlValidator.Warnings.Count; i++) { Console.WriteLine("\r\n* " + xmlValidator.Warnings[i].ToString()); } break; case XmlValidator.XmlValidatorResult.ErrorsExists: Console.WriteLine("Das XML-Dokument ist nicht valide."); // Fehler ausgeben Console.WriteLine("Die folgenden Fehler wurden gefunden:"); for (int i = 0; i < xmlValidator.Errors.Count; i++) { Console.WriteLine("\r\n* " + xmlValidator.Errors[i].ToString()); } // Überprüfen ob Warnungen vorhanden sind und diese ebenfalls ausgeben if (xmlValidator.Warnings.Count > 0) { Console.WriteLine("Die folgenden Warnungen wurden gemeldet:"); for (int i = 0; i < xmlValidator.Warnings.Count; i++) { Console.WriteLine("\r\n* " + xmlValidator.Warnings[i].ToString()); } } break; } Console.WriteLine("Beenden mit Return"); Console.ReadLine(); }