Главная страница

МУ_ЛР_ЛиПОАС. Методические указания по выполнению лабораторных работ по дисциплине (модулю) Лингвистическое и программное обеспечение автоматизированных систем


Скачать 2.76 Mb.
НазваниеМетодические указания по выполнению лабораторных работ по дисциплине (модулю) Лингвистическое и программное обеспечение автоматизированных систем
Дата12.04.2023
Размер2.76 Mb.
Формат файлаdoc
Имя файлаМУ_ЛР_ЛиПОАС.doc
ТипМетодические указания
#1057976
страница22 из 32
1   ...   18   19   20   21   22   23   24   25   ...   32

2.37. Проверка XML-документа в DOM


По умолчанию класс XmlDocument не сверяет код XML в модели DOM ни с данными схемы XSD, ни c определением типа документа (DTD). Код XML проверяется только на правильность формата.

С целью проверки XML в модели DOM можно проверить код XML в процессе его загрузки; для этого нужно передать проверяющий схему XmlReader методу Load класса XmlDocument или проверить ранее не проверенный XML-документ в модели DOM с помощью метода Validate класса XmlDocument.

После успешной проверки применяются настройки схемы по умолчанию, текстовые значения по необходимости преобразуются в атомарные, а сведения о типах ассоциируются с проверенными информационными элементами. В результате типизированные XML-данные заменяют ранее не типизированные XML-данные.

Для создания объекта XmlReader с проверкой по схеме выполните следующие действия.

  1. Сформируйте новый экземпляр класса XmlReaderSettings.

  2. Добавьте схему XML к свойству Schemas экземпляра XmlReaderSettings.

  3. Укажите Schema в качестве ValidationType.

  4. Дополнительно можно указать ValidationFlags и ValidationEventHandler для обработки ошибок проверки по схеме, а также предупреждений, выданных в процессе проверки.

  5. Наконец, передайте объект XmlReaderSettings методу Create класса XmlReader вместе с XML-документом; в результате будет создан объект XmlReader с проверкой по схеме.

В следующем примере кода объект XmlReader с проверкой по схеме проверяет XML-данные, загружаемые в модель DOM. В XML-документ вносятся недействительные изменения; документ вновь подвергается проверке, что приводит к появлению ошибок проверки схемы. Наконец, одна из ошибок исправляется, после чего часть XML-документа подвергается частичной проверке.

C#

using System;

using System.Xml;

using System.Xml.Schema;
class XmlDocumentValidationExample

{

static void Main(string[] args)

{

try

{

// Create a schema validating XmlReader.

XmlReaderSettings settings = new XmlReaderSettings();

settings.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd");

settings.ValidationEventHandler += new ValidationEventHandler(ValidationEventHandler);

settings.ValidationFlags = settings.ValidationFlags | XmlSchemaValidationFlags.ReportValidationWarnings;

settings.ValidationType = ValidationType.Schema;
XmlReader reader = XmlReader.Create("contosoBooks.xml", settings);
// The XmlDocument validates the XML document contained

// in the XmlReader as it is loaded into the DOM.

XmlDocument document = new XmlDocument();

document.Load(reader);
// 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 load 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.











Benjamin

Franklin



8.99









Herman

Melville



11.99









Plato



9.99





В примере в качестве входных данных также используется файл contosoBooks.xsd.



























































При проверке XML-данных в процессе их загрузки в модель DOM примите во внимание следующее.

  • В приведенном выше примере в случае обнаружения недействительного типа всегда вызывается обработчик событий ValidationEventHandler. Если обработчик события ValidationEventHandler не установлен на проверяющий XmlReader, при вызове XmlSchemaValidationException возникает исключение Load, когда какой-либо тип атрибута или элемента не совпадает с соответствующим типом, указанным в проверяющей схеме.

  • Когда XML-документ загружается в объект XmlDocument с ассоциированной схемой, которая определяет принимаемые по умолчанию значения, объект XmlDocument рассматривает эти используемые по умолчанию значения так, как если бы они были указаны в документе XML. Это означает, что свойство IsEmptyElement всегда возвращает значение false для элемента, который получил значение по умолчанию из схемы. Даже если в XML-документ элемент был записан как пустой.
1   ...   18   19   20   21   22   23   24   25   ...   32


написать администратору сайта