Информационый портал Windows 7

У нас вы можете скачать драйвера и программы, найти красивые темы и обои, учебные материалы, а также получить консультации и многое другое.

  • главная
  • контакты
  • карта сайта
 
Программирование » Уроки по C# для начинающих »

Приложение 6. Основные функции работы с xml в языке C#.

 

   Для начала рассмотрим класс:

   XmlTextWriter - простое средство записи, обеспечивающее быстрый прямой способ создания потоков файлов, содержащих XML-данные.

   Разберём, из чего состоит XmlTextWriter:

   1. Конструктор: XmlWriter - Инициализирует новый экземпляр класса XmlWriter.

   2. Свойства:

      Settings - получает объект XmlWriterSettings (свойства объекта XmlWriter), используемый для создания данного экземпляра XmlWriter.
      WriteState - возвращает состояние средства записи.
      XmlLang - получает текущую ограниченную область действия xml:lang.
      XmlSpace - возвращает класс XmlSpace, предоставляющий текущую область xml:space.

   3. Методы

      Close - закрывает данный поток и основной поток.
      Create(Stream) - создает новый экземпляр XmlWriter с использованием указанного потока.
      Create(String) - создает новый экземпляр XmlWriter с использованием указанного имени файла.
Возможны и другие варианты: Create(StringBuilder), Create(TextWriter), Create(XmlWriter), Create(Stream, XmlWriterSettings), Create(String,       XmlWriterSettings), Create(StringBuilder, XmlWriterSettings), Create(TextWriter, XmlWriterSettings), Create(XmlWriter, XmlWriterSettings).
      Dispose(), Dispose(Boolean) - освобождает неуправляемые ресурсы, используемые объектом XmlWriter, а при необходимости освобождает также управляемые ресурсы.
      Equals(Object) - определяет, равен ли заданный объект Object текущему объекту Object (Унаследовано от Object).
      Finalize - позволяет объекту попытаться освободить ресурсы и выполнить другие операции очистки, перед тем как объект будет утилизирован в процессе сборки мусора. (Унаследовано от Object).
      Flush - сбрасывает в основной поток содержимое буфера, а также очищает основной поток.
      GetHashCode - играет роль хэш-функции для определенного типа (Унаследовано от Object).
      GetType - возвращает объект Type для текущего экземпляра (Унаследовано от Object).
      LookupPrefix - возвращает ближайший префикс для URI пространства имен, определенный в текущей области пространства имен.
      MemberwiseClone - создает неполную копию текущего объекта Object. (Унаследовано от Object).
      ToString - возвращение строки, представляющей текущий объект (Унаследовано от Object).
      WriteAttributes - записывает все атрибуты, найденные в текущей позиции в классе XmlReader.
      WriteAttributeString(String, String) - записывает атрибут с указанным локальным именем и значением.
      WriteAttributeString(String, String, String) - записывает атрибут с указанным локальным именем, URI пространства имен и значением.
      WriteAttributeString(String, String, String, String) - записывает атрибут с указанным префиксом, локальным именем, URI пространства имен и значением.
      WriteBase64 - преобразует указанный набор двоичных байтов к виду Base64 и выводит получившийся текст.
      WriteBinHex - преобразует указанный набор двоичных байтов как BinHex и выводит получившийся текст.
      WriteCData - записывает блок <![CDATA[...]]>, содержащий заданный текст.
      WriteCharEntity - вызывает создание сущности знака для указанного значения знака Юникода.
      WriteChars - записывает текст в один буфер за раз.
      WriteComment - записывает примечание <!--...-->, содержащее заданный текст.
      WriteDocType - записывает объявление DOCTYPE с указанным именем и дополнительными атрибутами.
      WriteElementString(String, String) - записывает элемент с заданными локальным именем и значением.
      WriteElementString(String, String, String), WriteElementString(String, String, String, String) - записывает элемент с заданным локальным именем и URI пространства имен.
      WriteEndAttribute - закрывает вызов предыдущего метода WriteStartAttribute.
      WriteEndDocument - закрывает все открытые элементы или атрибуты и возвращает средство записи в состояние Start.
      WriteEndElement - закрывает один элемент и извлекает соответствующую область пространства имен.
      WriteEntityRef - считывает ссылку на сущность в виде &name;.
      WriteFullEndElement - закрывает один элемент и извлекает соответствующую область пространства имен.
      WriteName - считывает указанное имя, гарантируя его допустимость согласно рекомендации W3C по языку XML версии 1.0.
      WriteNmToken - считывает указанное имя, гарантируя допустимость NmToken согласно рекомендациям W3C по языку XML версии 1.0.
      WriteNode(XmlReader, Boolean) - копирует все данные из средства чтения в средство записи и перемещает средство чтения в начало следующего узла того же уровня.
      WriteNode(XPathNavigator, Boolean) - копирует все из объекта XPathNavigator в средство записи. Позиция XPathNavigator остается неизменной.
      WriteProcessingInstruction - выводит инструкцию обработки с пробелом между именем и текстом в следующем виде: <? имя текст?>.
      WriteQualifiedName - записывает проверенное имя пространства имен. Этот метод ищет префикс для пространства имен в его области.
      WriteRaw(String) - записывает исходную разметку из строки (вручную) при переопределении в производном классе.
      WriteRaw(Char[], Int32, Int32) - считывает исходную разметку из буфера знаков (вручную) при переопределении в производном классе.
      WriteStartAttribute(String) - записывает начало атрибута с заданным локальным именем.
      WriteStartAttribute(String, String) - записывает начало атрибута с заданным локальным именем и URI пространства имен.
      WriteStartAttribute(String, String, String) - записывает начало атрибута с указанным префиксом, локальным именем и URI пространства имен.
      WriteStartDocument()- записывает объявление XML с номером версии 1.0.
      WriteStartDocument(Boolean) - записывает объявление XML с номером версии "1.0" и автономным атрибутом.
      WriteStartElement(String) - записывает открывающий тег с указанным локальным именем.
      WriteStartElement(String, String) - записывает указанный открывающий тег и связывает его с заданным пространством имен.
      WriteStartElement(String, String, String) - записывает указанный открывающий тег и связывает его с заданным пространством имен и префиксом.
      WriteString - записывает заданное текстовое содержимое при переопределении в производном классе.
      WriteSurrogateCharEntity - создает и записывает сущность знака-заместителя для пары знаков-заместителей.
      WriteValue(<значение>) - записывает значение.
      WriteWhitespace - при переопределении в производном классе считывает указанный пробел.


Полезные советы:


   При использовании методов XmlWriter для вывода XML элементы и атрибуты не записываются до тех пор, пока не будет вызван метод Close. Например при использовании XmlWriter для заполнения объекта XmlDocument, до тех пор пока не будет закрыт XmlWriter, не удастся наблюдать записанные элементы и атрибуты в конечном документе.

   Исключения, созданные классом XmlWriter, могут содержать сведения о пути, которые не требуется обрабатывать приложением. Приложения должны перехватывать исключения и обрабатывать их соответствующим образом.

   XmlWriter не проверяет данные, передаваемые методам WriteDocType или WriteRaw. Не следует передавать в эти методы произвольные данные.


   Теперь рассмотрим класс:

   XmlReader - простое средство чтения, обеспечивающее быстрый прямой способ доступа к данным XML.

   Разберём, из чего состоит XmlReader:

   1. Конструктор: XmlReader - инициализирует новый экземпляр класса XmlReader.

   2. Свойства:

      AttributeCount - получает количество атрибутов текущего узла.
      BaseURI - получает базовый URI текущего узла.
      CanReadBinaryContent - получает значение, указывающее, реализует ли объект XmlReader методы чтения двоичного содержимого.
      CanReadValueChunk - возвращает значение, указывающее, реализует ли объект XmlReader метод ReadValueChunk.
      CanResolveEntity - возвращает значение, определяющее возможность анализа и разрешения объектов с помощью данного средства чтения.
      Depth - получает глубину текущего узла в XML-документе.
      EOF - получает значение, показывающее, установлено ли средство чтения в конец потока.
      HasAttributes - получает значение, указывающее, имеются ли у текущего узла какие-либо атрибуты.
      HasValue - получает значение, показывающее, имеет ли текущий узел свойство Value.
      IsDefault - получает значение, определяющее, является текущий узел атрибутом, созданным из значения по умолчанию, определенного в DTD или схеме.
      IsEmptyElement - получает значение, определяющее, является ли текущий узел пустым элементом (например, <MyElement/>).
      Item[Int32] - получает значение атрибута по указанному индексу.
      Item[String] - получает значение атрибута с указанным свойством Name.
      Item[String, String] - получает значение атрибута с указанными свойствами LocalName и NamespaceURI.
      LocalName - получает локальное имя текущего узла.
      Name - получает полное имя текущего узла.
      NamespaceURI - получает URI пространства имен (определенное в спецификации W3C Namespace) узла, на котором расположено средство чтения.
      NameTable - получает класс XmlNameTable, связанный с данной реализацией.
      NodeType - получает тип текущего узла.
      Prefix - получает префикс пространства имен, связанный с текущим узлом.
      QuoteChar - получает знак кавычек для выделения значения узла атрибута.
      ReadState - получает состояние средства чтения.
      SchemaInfo - получает сведения схемы, которые были назначены текущему узлу в результате проверки схемы.
      Settings - возвращает объект XmlReaderSettings, используемый для создания этого экземпляра XmlReader.
      Value - получает текстовое значение текущего узла.
      ValueType - возвращает тип CLR текущего узла.
      XmlLang - получает текущую ограниченную область действия xml:lang.
      XmlSpace - получает текущую ограниченную область действия xml:space.

   3. Методы:

      Close - изменяет значение свойства ReadState на Closed.
      Create(Stream) - создает новый экземпляр XmlReader с использованием указанного потока.
      Create(String) - создает новый экземпляр XmlReader с указанным URI.
Другие варианты: Create(TextReader), Create(Stream, XmlReaderSettings), Create(String, XmlReaderSettings), Create(TextReader, XmlReaderSettings), Create(XmlReader, XmlReaderSettings), Create(Stream, XmlReaderSettings, String), Create(Stream, XmlReaderSettings, XmlParserContext), Create(String, XmlReaderSettings, XmlParserContext), Create(TextReader, XmlReaderSettings, String), Create(TextReader, XmlReaderSettings, XmlParserContext)
      Dispose() , Dispose(Boolean) - освобождает неуправляемые ресурсы, используемые классом XmlReader, а при необходимости освобождает также управляемые ресурсы.
      Equals(Object) - определяет, равен ли заданный объект Object текущему объекту Object (Унаследовано от Object).
      Finalize - позволяет объекту попытаться освободить ресурсы и выполнить другие операции очистки, перед тем как объект будет утилизирован в процессе сборки мусора (Унаследовано от Object).
      GetAttribute(Int32) - получает значение атрибута по указанному индексу.
      GetAttribute(String) - получает значение атрибута с указанным свойством Name.
      GetAttribute(String, String) - получает значение атрибута с указанными свойствами LocalName и NamespaceURI.
      GetHashCode - играет роль хэш-функции для определенного типа (Унаследовано от Object).
      GetType - возвращает объект Type для текущего экземпляра (Унаследовано от Object).
      IsName - возвращает значение, определяющее, является ли строковый аргумент допустимым именем XML.
      IsNameToken - возвращает значение, определяющее, является ли строковый аргумент допустимой лексемой имени XML.
      IsStartElement()- вызывает метод MoveToContent и проверяет, является ли текущий узел содержимого открывающим тегом или пустым тегом элемента.
      IsStartElement(String) - вызывает метод MoveToContent и проверяет, является ли текущий узел содержимого открывающим тегом или пустым тегом элемента, а также соответствует ли значение свойства Name элемента заданному аргументу.
      IsStartElement(String, String) - вызывает метод MoveToContent и проверяет, является ли текущий узел содержимого открывающим тегом или пустым тегом элемента, а также соответствуют ли значения свойств LocalName и NamespaceURI элемента заданным строкам.
      LookupNamespace - разрешает префикс пространства имен в ограниченной области действия текущего элемента.
      MemberwiseClone - создает неполную копию текущего объекта Object (Унаследовано от Object).
      MoveToAttribute(Int32) - перемещает к атрибуту с указанным индексом.
      MoveToAttribute(String) - перемещает к атрибуту с указанным Name.
      MoveToAttribute(String, String) - перемещает к атрибуту с указанными LocalName и NamespaceURI.
      MoveToContent - проверяет, является ли текущий узел узлом содержимого (текст без пустого пространства, CDATA, Element, EndElement, EntityReference или EndEntity). Если узел не является узлом содержимого, средство чтения пропускает этот узел и переходит в конец файла или к следующему узлу содержимого. Пропускаются узлы следующих типов: ProcessingInstruction, DocumentType, Comment, Whitespace и SignificantWhitespace.
      MoveToElement - перемещает к элементу, содержащему текущий узел атрибута.
      MoveToFirstAttribute - перемещает к первому атрибуту.
      MoveToNextAttribute - перемещает к следующему атрибуту.
      Read - считывает из потока следующий узел.
      ReadAttributeValue - разбирает значение атрибута в один или более узлов Text, EntityReference или EndEntity.
      ReadContentAs - прочитывает содержимое объекта указанного типа.
      ReadContentAsBase64 - считывает содержимое и возвращает раскодированные двоичные байты Base64.
      ReadContentAsBinHex - считывает содержимое и возвращает раскодированные двоичные байты BinHex.
      ReadContentAsBoolean - считывает содержимое текста в текущей позиции как значение Boolean.
      ReadContentAsDateTime - считывает содержимое текста в текущей позиции как объект DateTime.
      ReadContentAsDecimal - считывает содержимое текста в текущей позиции как объект Decimal.
      ReadContentAsDouble - считывает содержимое текста в текущей позиции как число с плавающей запятой двойной точности.
      ReadContentAsFloat - считывает содержимое текста в текущей позиции как число с плавающей запятой одинарной точности.
      ReadContentAsInt - считывает содержимое текста в текущей позиции как целое 32-разрядное число со знаком.
      ReadContentAsLong - считывает содержимое текста в текущей позиции как целое 64-разрядное число со знаком.
      ReadContentAsObject - считывает содержимое текста в текущей позиции как значение Object.
      ReadContentAsString - считывает содержимое текста в текущей позиции как объект String.
      ReadElementContentAs(Type, IXmlNamespaceResolver) - считывает содержимое элемента в качестве требуемого типа.
      ReadElementContentAs(Type, IXmlNamespaceResolver, String, String) - проверяет, сопоставлен ли URI локального имени и пространства имен с URI текущего элемента, затем считывает содержимое элемента требуемого типа.
      ReadElementContentAsBase64 - считывает элемент и раскодирует содержимое Base64.
      ReadElementContentAsBinHex - считывает элемент и раскодирует содержимое BinHex.
      ReadElementContentAsBoolean() - считывает текущий элемент и возвращает содержимое объекта Boolean.
      ReadElementContentAsBoolean(String, String) - проверяет соответствие указанного URI локального имени и пространства имен с URI текущего элемента, затем считывает текущий элемент и возвращает содержимое как объект Boolean.
      ReadElementContentAsDateTime() - считывает текущий элемент и возвращает содержимое объекта DateTime.
      ReadElementContentAsDateTime(String, String) - проверяет соответствие указанного URI локального имени и пространства имен с URI текущего элемента, затем считывает текущий элемент и возвращает содержимое как объект DateTime.
      ReadElementContentAsDecimal() - считывает текущий элемент и возвращает содержимое объекта Decimal.
      ReadElementContentAsDecimal(String, String) - проверяет соответствие указанного URI локального имени и пространства имен с URI текущего элемента, затем считывает текущий элемент и возвращает содержимое как объект Decimal.
      ReadElementContentAsDouble() - считывает текущий элемент и возвращает содержимое как число с плавающей запятой двойной точности.
      ReadElementContentAsDouble(String, String) - проверяет соответствие указанного URI локального имени и пространства имен с URI текущего элемента, затем считывает текущий элемент и возвращает содержимое как число с плавающей запятой двойной точности.
      ReadElementContentAsFloat() - считывает текущий элемент и возвращает содержимое как число с плавающей запятой одинарной точности.
      ReadElementContentAsFloat(String, String) - проверяет соответствие указанного URI локального имени и пространства имен с URI текущего элемента, затем считывает текущий элемент и возвращает содержимое как число с плавающей запятой одинарной точности.
      ReadElementContentAsInt() - считывает текущий элемент и возвращает содержимое в качестве 32-разрядного целого числа со знаком.
      ReadElementContentAsInt(String, String) - проверяет соответствие указанного URI локального имени и пространства имен с URI текущего элемента, затем считывает текущий элемент и возвращает содержимое как 32-разрядное целое число со знаком.
      ReadElementContentAsLong() - считывает текущий элемент и возвращает содержимое как 64-разрядное целое число со знаком.
      ReadElementContentAsLong(String, String) - проверяет соответствие указанного URI локального имени и пространства имен с URI текущего элемента, затем считывает текущий элемент и возвращает содержимое как 64-разрядное целое число со знаком.
      ReadElementContentAsObject() - читает текущий элемент и возвращает содержимое в качестве объекта Object.
      ReadElementContentAsObject(String, String) - проверяет соответствие указанного URI локального имени и пространства имен с URI текущего элемента, затем считывает текущий элемент и возвращает содержимое как объект Object.
      ReadElementContentAsString() - считывает текущий элемент и возвращает содержимое объекта String.
      ReadElementContentAsString(String, String) - проверяет соответствие указанного URI локального имени и пространства имен с URI текущего элемента, затем считывает текущий элемент и возвращает содержимое как объект String.
      ReadElementString() - считывает текстовый элемент.
      ReadElementString(String) - проверяет перед чтением текстового элемента соответствие значения свойства Name найденного элемента и заданной строки.
      ReadElementString(String, String) - проверяет перед чтением текстового элемента соответствие значений свойств LocalName и NamespaceURI найденного элемента и заданных строк.
      ReadEndElement - проверяет, является ли текущий узел содержимого закрывающим тегом, и перемещает средство чтения на следующий узел.
      ReadInnerXml - считывает все содержимое, включая разметку, как строку.
      ReadOuterXml - считывает содержимое в виде строки, включая разметку, предоставляющую этот узел и все его дочерние узлы.
      ReadStartElement() - проверяет, является ли текущий узел элементом и перемещает средство чтения на следующий узел.
      ReadStartElement(String) - проверяет, является ли текущий узел элементом с заданным Name, и перемещает средство чтения на следующий узел.
      ReadStartElement(String, String) - проверяет, является ли текущий узел элементом с заданным LocalName и NamespaceURI, и перемещает средство чтения на следующий узел.
      ReadString - считывает содержимое узла элемента или текстового узла в виде строки.
      ReadSubtree - возвращает новый экземпляр XmlReader, который может использоваться для считывания текущего узла и всех его потомков.
      ReadToDescendant(String) - переводит XmlReader к следующему сопоставленному элементу-потомку с указанным проверенным именем.
      ReadToDescendant(String, String) - переводит XmlReader к следующему элементу-потомку с указанным локальным именем и URI пространства имен.
      ReadToFollowing(String) - производит чтение до обнаружения элемента с указанным проверенным именем.
      ReadToFollowing(String, String) - производит чтение до обнаружения указанного URI локального имени и пространства имен.
      ReadToNextSibling(String) - переводит XmlReader к следующему сопоставленному родственному элементу с указанным проверенным именем.
      ReadToNextSibling(String, String) - переводит XmlReader к следующему родственному элементу с указанным локальным именем и URI пространства имен.
      ReadValueChunk - считывает большие потоки текста, внедренного в XML-документ.
      ResolveEntity - разрешает ссылки для сущностей для узлов EntityReference.
      Skip - пропускает дочерний узел текущего узла.
      ToString - возвращение строки, представляющей текущий объект (Унаследовано от Object).

Полезные советы:


   XmlReader вызывает исключение XmlException при наличии ошибок синтаксического анализа XML. После вызова исключения предсказать состояние средства чтения невозможно. Например, указанный тип узла может отличаться от фактического типа текущего узла. Используйте свойство ReadState, чтобы проверить, находится ли средство чтения в состоянии ошибки.

   XML-данные могут содержать ссылки на внешние ресурсы, такие как файл схемы. По умолчанию внешние ресурсы определяются с помощью объекта XmlUrlResolver без указания учетных данных пользователя. Более надежную защиту можно обеспечить одним из следующих способов.

   Ограничить ресурсы, к которым XmlReader может получить доступ, присвоив свойству XmlReaderSettings.XmlResolver объект XmlSecureResolver в качестве значения.

   Запретить XmlReader открывать любые внешние ресурсы, задав для свойства XmlReaderSettings.XmlResolver значение null.

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

   Для обработки больших потоков данных можно использовать метод ReadValueChunk. Этот метод считывает небольшое количество символов за один раз, а не выделяет одну строку для всего значения.

   При чтении XML-документа с большим количеством уникальных локальных имен, пространств имен или префиксов может возникнуть проблема. При использовании класса, производного от XmlReader и вызове свойства LocalName, Prefix или NamespaceURI для каждого элемента, возвращаемая строка добавляется в NameTable. Коллекции, хранящиеся в NameTable, никогда не уменьшаются в размере, что приводит к виртуальной "утечке памяти", выделенной для дескрипторов строки. Один из способов предупреждения этой проблемы — наследование от класса NameTable и принудительное применение максимального размера квоты. (Не существует способа для предотвращения использования NameTable или для переключения NameTable при переполнении этого объекта). Другой способ предупреждения заключается в отказе от использования упомянутых свойств. Вместо них можно использовать метод MoveToAttribute с методом IsStartElement (там, где это возможно). Эти методы не возвращают строки и, таким образом, позволяют предотвратить переполнение коллекции NameTable.








     Жду отзывов и предложений

   К списку статей

   DiamondTigeR

   
Приложение 6. Основные функции работы с xml в языке C#.



Автор: d.tiger. Дата: 9-07-2012, 12:35

Просмотров: 5755

В избранное:

Уважаемый посетитель, для доступа к ресурсам сайта OS-7.RU, а также для скачивания материалов - Вам необходимо зарегистрироваться либо войти под своим именем.







 (голосов: 0)
Комментарии (0) Распечатать