МУ_ЛР_ЛиПОАС. Методические указания по выполнению лабораторных работ по дисциплине (модулю) Лингвистическое и программное обеспечение автоматизированных систем
![]()
|
2.38. Проверка XML-документа в DOMМетод Validate класса XmlDocument сверяет XML-данные, загружаемые в модель DOM, со схемами, содержащимися в свойстве XmlDocument объекта Schemas. После успешной проверки применяются настройки схемы по умолчанию, текстовые значения по необходимости преобразуются в атомарные, а сведения о типах ассоциируются с проверенными информационными элементами. В результате типизированные XML-данные заменяют ранее не типизированные XML-данные. Публикуемый ниже пример аналогичен примеру, приведенному ранее в подразделе «Проверка XML-документа в процессе его загрузки в модель DOM». В этом примере XML-документ проверяется не в процессе загрузки в модель DOM, а по завершении данного процесса. При этом используется метод Validate класса XmlDocument. Метод Validate сверяет XML-документ со схемами XML, содержащимися в свойстве Schemas объекта XmlDocument. Затем в XML-документ вносятся недействительные изменения; документ вновь подвергается проверке, что приводит к появлению ошибок проверки схемы. Наконец, одна из ошибок исправляется, после чего часть XML-документа подвергается частичной проверке. C# using System; using System.Xml; using System.Xml.Schema; class XmlDocumentValidationExample { static void Main(string[] args) { try { // Create a new XmlDocument instance and load // the XML document into the DOM. XmlDocument document = new XmlDocument(); document.Load("contosoBooks.xml"); // Add the XML schema for the XML document to the // Schemas property of the XmlDocument. document.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd"); // Validate the XML document loaded into the DOM. document.Validate(ValidationEventHandler); // Make an invalid change to the first and last // price elements in the XML document, and write // the XmlSchemaInfo values assigned to the price // element during validation to the console. XmlNamespaceManager manager = new XmlNamespaceManager(document.NameTable); manager.AddNamespace("bk", "http://www.contoso.com/books"); XmlNode priceNode = document.SelectSingleNode(@"/bk:bookstore/bk:book/bk:price", manager); Console.WriteLine("SchemaInfo.IsDefault: {0}", priceNode.SchemaInfo.IsDefault); Console.WriteLine("SchemaInfo.IsNil: {0}", priceNode.SchemaInfo.IsNil); Console.WriteLine("SchemaInfo.SchemaElement: {0}", priceNode.SchemaInfo.SchemaElement); Console.WriteLine("SchemaInfo.SchemaType: {0}", priceNode.SchemaInfo.SchemaType); Console.WriteLine("SchemaInfo.Validity: {0}", priceNode.SchemaInfo.Validity); priceNode.InnerXml = "A"; XmlNodeList priceNodes = document.SelectNodes(@"/bk:bookstore/bk:book/bk:price", manager); XmlNode lastprice = priceNodes[priceNodes.Count - 1]; lastprice.InnerXml = "B"; // Validate the XML document with the invalid changes. // The invalid changes cause schema validation errors. document.Validate(ValidationEventHandler); // Correct the invalid change to the first price element. priceNode.InnerXml = "8.99"; // Validate only the first book element. The last book // element is invalid, but not included in validation. XmlNode bookNode = document.SelectSingleNode(@"/bk:bookstore/bk:book", manager); document.Validate(ValidationEventHandler, bookNode); } catch (XmlException ex) { Console.WriteLine("XmlDocumentValidationExample.XmlException: {0}", ex.Message); } catch(XmlSchemaValidationException ex) { Console.WriteLine("XmlDocumentValidationExample.XmlSchemaValidationException: {0}", ex.Message); } catch (Exception ex) { Console.WriteLine("XmlDocumentValidationExample.Exception: {0}", ex.Message); } } static void ValidationEventHandler(object sender, System.Xml.Schema.ValidationEventArgs args) { if (args.Severity == XmlSeverityType.Warning) Console.Write("\nWARNING: "); else if (args.Severity == XmlSeverityType.Error) Console.Write("\nERROR: "); Console.WriteLine(args.Message); } } В этом примере в качестве входных данных используются файлы contosoBooks.xml и contosoBooks.xsd, упоминавшиеся ранее в подразделе «Проверка XML-документа в процессе его загрузки в модель DOM». |