МУ_ЛР_ЛиПОАС. Методические указания по выполнению лабораторных работ по дисциплине (модулю) Лингвистическое и программное обеспечение автоматизированных систем
Скачать 2.76 Mb.
|
2.39. Обработка ошибок проверки и предупрежденийСообщения об ошибках проверки схемы XML выдаются при проверке XML-данных, загружаемых в модель DOM. Пользователь извещается обо всех ошибках проверки схемы, обнаруженных в процессе проверки загружаемых XML-данных, или при проверке ранее не подвергавшегося проверке XML-документа. Ошибки проверки обрабатываются с помощью обработчика ValidationEventHandler. Если обработчик ValidationEventHandler был назначен экземпляру XmlReaderSettings или передан методу Validate класса XmlDocument, ValidationEventHandler будет обрабатывать ошибки проверки схемы; иначе возникнет исключение XmlSchemaValidationException при обнаружении ошибки проверки схемы. Примечание XML-данные загружаются в модель DOM, несмотря на возникновение ошибок проверки схемы, если обработчик ошибок ValidationEventHandler не вызовет исключение для остановки процесса. Предупреждения проверки схемы не выводятся, если на объекте ReportValidationWarnings не установлен флаг XmlReaderSettings. Примеры, иллюстрирующие работу ValidationEventHandler, см. выше в подразделах «Проверка XML-документа в процессе его загрузки в модель DOM» и «Проверка XML-документа в модели DOM». 2.40. Сохранение и запись документаПри загрузке и сохранении XmlDocument между сохраненным и исходным документами возможны следующие различия: Если свойство PreserveWhitespace имеет значение true перед вызовом метода Save, то пробелы в документе при выводе сохраняются. Если свойство имеет значение false, то XmlDocument автоматически вставляет отступы в выходные данные. Все пробелы между атрибутами сокращаются до одного символа пробела. Пробелы между элементами изменяются. Значащие пробелы сохраняются, а незначащие - нет. Но при сохранении документа по умолчанию используется режим XmlTextWriter Отступ, обеспечивающий аккуратный внешний вид при печати и удобство чтения. Символ кавычки вокруг значений атрибута по умолчанию заменяется символом двойной кавычки. Выбрать в качестве символа кавычки двойную кавычку или одинарную кавычку можно с помощью свойства QuoteChar класса XmlTextWriter. По умолчанию символы числовых сущностей, например {, развертываются. Значение отметки порядка байт во входном документе не сохраняется. UCS-2 сохраняется как UTF-8, если явно не создана XML-декларация, указывающая другую кодировку. Если требуется записать XmlDocument в файл или поток, то записываемые выходные данные не будут отличаться от содержимого документа. То есть, XmlDeclaration записывается только если объявление содержится в документе, а кодировка, используемая при записи документа, совпадает с указанной в узле декларации. 2.41. Запись XmlDeclarationXML-декларацию создают члены XmlDocument и элементы XmlDeclaration классов OuterXml, InnerXml, метод WriteTo, а также методы XmlDocument и Save класса WriteContentTo. Для свойств XmlDocument методов OuterXml, InnerXml, а также методов Save, WriteTo и WriteContentTo кодировка, записываемая в XML-декларацию, берется из узла XmlDeclaration. Если узел XmlDeclaration отсутствует, то XmlDeclaration не записывается. Если в узле XmlDeclaration нет кодировки, то кодировка не записывается в XML-декларацию. Методы XmlDocument.Save и XmlDocument.Save всегда записывают XmlDeclaration. Они получают кодировку из модуля, в который производится запись. То есть, кодовое значение модуля записи переопределяет кодировку в документе и в XmlDeclaration. Например, приведенный ниже код не записывает кодировку в XML-декларацию, находящуюся в выходном файле out.xml. C# XmlDocument doc = new XmlDocument(); XmlTextWriter tw = new XmlTextWriter("out.xml", null); doc.Load("text.xml"); doc.Save(tw); Для метода Save XML-декларация записывается с помощью метода WriteStartDocument класса XmlWriter. Поэтому при перезаписи метода WriteStartDocument изменяется способ записи начала документа. Если для элементов XmlDeclaration в OuterXml, WriteTo и InnerXml не установлено свойство Encoding, то кодировка не записывается. В противном случае кодировка, записанная в XML-декларацию, не отличается от кодировки в свойстве Encoding. 2.42. Запись содержимого документа с помощью свойства OuterXmlСвойство OuterXml является расширением Майкрософт для стандартов объектной модели DOM XML-документа консорциума W3C. Свойство OuterXml позволяет получить разметку как полного XML-документа, так и единичного узла вместе с его дочерними узлами. Свойство OuterXml возвращает разметку, предоставляющую заданный узел и все его дочерние узлы. В приведенном ниже образце кода показано сохранение документа целиком в виде строки. C# XmlDocument mydoc = new XmlDocument(); // Perform application needs here, like mydoc.Load("myfile"); // Now save the entire document to a string variable called "xml". string xml = mydoc.OuterXml; В следующем образце кода показано, как сохранить только отдельный элемент документа. C# // For the content of the Document Element only. string xml = mydoc.DocumentElement.OuterXml; Однако если требуется содержимое дочерних узлов, можно использовать свойство InnerText. |