Данная статья переведена с помощью средств машинного перевода. Чтобы просмотреть ее на английском языке, установите флажок Английский. Вы также можете просматривать английский текст во всплывающем окне, наводя указатель мыши на переведенный текст.
Перевод
Английский

Класс XmlReader

 

Опубликовано: Октябрь 2016

Предоставляет средство чтения, обеспечивающее быстрый прямой доступ (без кэширования) к данным XML.

Просмотреть исходный код .NET Framework для этого типа Reference Source.

Пространство имен:   System.Xml
Сборка:  System.Xml (в System.Xml.dll)


public abstract class XmlReader : IDisposable

ИмяОписание
System_CAPS_protmethodXmlReader()

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

ИмяОписание
System_CAPS_pubpropertyAttributeCount

Когда переопределено в производном классе, возвращает количество атрибутов текущего узла.

System_CAPS_pubpropertyBaseURI

Когда переопределено в производном классе, возвращает базовый URI текущего узла.

System_CAPS_pubpropertyCanReadBinaryContent

Получает значение, указывающее, реализует ли объект XmlReader методы чтения двоичного содержимого.

System_CAPS_pubpropertyCanReadValueChunk

Возвращает значение, указывающее, реализует ли объект XmlReader метод ReadValueChunk.

System_CAPS_pubpropertyCanResolveEntity

Возвращает значение, определяющее, способно ли данное средство чтения выполнять синтаксический анализ и разрешение сущностей.

System_CAPS_pubpropertyDepth

Когда переопределено в производном классе, возвращает глубину текущего узла в XML-документе.

System_CAPS_pubpropertyEOF

Когда переопределено в производном классе, возвращает значение, показывающее, позиционировано ли средство чтения в конец потока.

System_CAPS_pubpropertyHasAttributes

Возвращает значение, показывающее, имеются ли атрибуты у текущего узла.

System_CAPS_pubpropertyHasValue

При переопределении в производном классе получает значение, указывающее, является ли текущий узел может иметь Value.

System_CAPS_pubpropertyIsDefault

Когда переопределено в производном классе, возвращает значение, определяющее, является ли текущий узел атрибутом, созданным из значения по умолчанию, определенного в DTD или схеме.

System_CAPS_pubpropertyIsEmptyElement

При переопределении в производном классе получает значение, указывающее, является ли текущий узел пустым элементом (например, <MyElement/>).

System_CAPS_pubpropertyItem[Int32]

Когда переопределено в производном классе, возвращает значение атрибута по указанному индексу.

System_CAPS_pubpropertyItem[String]

При переопределении в производном классе получает значение атрибута с указанным Name.

System_CAPS_pubpropertyItem[String, String]

При переопределении в производном классе получает значение атрибута с указанным LocalName и NamespaceURI.

System_CAPS_pubpropertyLocalName

Когда переопределено в производном классе, возвращает локальное имя текущего узла.

System_CAPS_pubpropertyName

Когда переопределено в производном классе, возвращает полное имя текущего узла.

System_CAPS_pubpropertyNamespaceURI

Когда переопределено в производном классе, возвращает URI пространства имен (определенное в спецификации W3C Namespace) узла, на котором расположено средство чтения.

System_CAPS_pubpropertyNameTable

При переопределении в производном классе получает XmlNameTable связанный с данной реализацией.

System_CAPS_pubpropertyNodeType

Когда переопределено в производном классе, возвращает тип текущего узла.

System_CAPS_pubpropertyPrefix

Когда переопределено в производном классе, возвращает префикс пространства имен, связанный с текущим узлом.

System_CAPS_pubpropertyQuoteChar

Когда переопределено в производном классе, возвращает знак кавычек для выделения значения узла атрибута.

System_CAPS_pubpropertyReadState

Когда переопределено в производном классе, возвращает состояние средства чтения.

System_CAPS_pubpropertySchemaInfo

Возвращает сведения схемы, которые были назначены текущему узлу в результате проверки схемы.

System_CAPS_pubpropertySettings

Получает объект XmlReaderSettings, используемый для создания данного экземпляра XmlReader.

System_CAPS_pubpropertyValue

Когда переопределено в производном классе, возвращает текстовое значение текущего узла.

System_CAPS_pubpropertyValueType

Возвращает тип CLR текущего узла.

System_CAPS_pubpropertyXmlLang

При переопределении в производном классе, возвращает текущую xml:lang область.

System_CAPS_pubpropertyXmlSpace

При переопределении в производном классе, возвращает текущую xml:space область.

ИмяОписание
System_CAPS_pubmethodClose()

При переопределении в производном классе изменяет ReadState для Closed.

System_CAPS_pubmethodSystem_CAPS_staticCreate(Stream)

Создает новый экземпляр XmlReader, используя заданный поток с параметрами по умолчанию.

System_CAPS_pubmethodSystem_CAPS_staticCreate(Stream, XmlReaderSettings)

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

System_CAPS_pubmethodSystem_CAPS_staticCreate(Stream, XmlReaderSettings, String)

Создает новый экземпляр XmlReader с использованием указанного потока, базового URI и параметров.

System_CAPS_pubmethodSystem_CAPS_staticCreate(Stream, XmlReaderSettings, XmlParserContext)

Создает новый экземпляр XmlReader, используя заданный поток, параметры и контекстную информацию для анализа.

System_CAPS_pubmethodSystem_CAPS_staticCreate(String)

Создает новый экземпляр XmlReader с указанным URI.

System_CAPS_pubmethodSystem_CAPS_staticCreate(String, XmlReaderSettings)

Создает новый экземпляр XmlReader с использованием указанного URI и параметров.

System_CAPS_pubmethodSystem_CAPS_staticCreate(String, XmlReaderSettings, XmlParserContext)

Создает новый экземпляр XmlReader с помощью указанного URI, параметров и сведений о контексте для анализа.

System_CAPS_pubmethodSystem_CAPS_staticCreate(TextReader)

Создает экземпляр XmlReader с использованием указанного средства чтения текста.

System_CAPS_pubmethodSystem_CAPS_staticCreate(TextReader, XmlReaderSettings)

Создает новый экземпляр XmlReader с использованием указанного модуля чтения текста и параметров.

System_CAPS_pubmethodSystem_CAPS_staticCreate(TextReader, XmlReaderSettings, String)

Создает экземпляр XmlReader с использованием указанного средства чтения текста, параметров и базового кода URI.

System_CAPS_pubmethodSystem_CAPS_staticCreate(TextReader, XmlReaderSettings, XmlParserContext)

Создает новый экземпляр XmlReader с использованием указанного средства чтения текста, параметров и сведений о контексте для анализа.

System_CAPS_pubmethodSystem_CAPS_staticCreate(XmlReader, XmlReaderSettings)

Создает новый экземпляр XmlReader, используя заданное средство чтения XML и параметры.

System_CAPS_pubmethodDispose()

Освобождает все ресурсы, используемые текущим экземпляром класса XmlReader.

System_CAPS_protmethodDispose(Boolean)

Освобождает неуправляемые ресурсы, используемые объектом XmlReader, а при необходимости освобождает также управляемые ресурсы.

System_CAPS_pubmethodEquals(Object)

Определяет, равен ли заданный объект текущему объекту.(Наследуется от Object.)

System_CAPS_protmethodFinalize()

Позволяет объекту попытаться освободить ресурсы и выполнить другие операции по очистке перед тем, как объект будет утилизирован сборщиком мусора. (Наследуется от Object.)

System_CAPS_pubmethodGetAttribute(Int32)

Когда переопределено в производном классе, возвращает значение атрибута по указанному индексу.

System_CAPS_pubmethodGetAttribute(String)

При переопределении в производном классе получает значение атрибута с указанным Name.

System_CAPS_pubmethodGetAttribute(String, String)

При переопределении в производном классе получает значение атрибута с указанным LocalName и NamespaceURI.

System_CAPS_pubmethodGetHashCode()

Служит хэш-функцией по умолчанию.(Наследуется от Object.)

System_CAPS_pubmethodGetType()

Возвращает объект Type для текущего экземпляра.(Наследуется от Object.)

System_CAPS_pubmethodGetValueAsync()

Асинхронно возвращает значение текущего узла.

System_CAPS_pubmethodSystem_CAPS_staticIsName(String)

Возвращает значение, определяющее, является ли строковый аргумент допустимым именем XML.

System_CAPS_pubmethodSystem_CAPS_staticIsNameToken(String)

Возвращает значение, определяющее, является ли строковый аргумент допустимым токеном имени XML.

System_CAPS_pubmethodIsStartElement()

Вызовы MoveToContent и проверяет, является ли текущий узел содержимого открывающим тегом или пустым тегом элемента.

System_CAPS_pubmethodIsStartElement(String)

Вызовы MoveToContent и проверяет, является ли текущий узел содержимого открывающим тегом или пустым тегом элемента, а если Name свойство элемента соответствует заданному аргументу.

System_CAPS_pubmethodIsStartElement(String, String)

Вызовы MoveToContent и проверяет, является ли текущий узел содержимого открывающим тегом или пустым тегом элемента, а если LocalName и NamespaceURI свойства найденного элемента соответствует заданной строки.

System_CAPS_pubmethodLookupNamespace(String)

Когда переопределено в производном классе, разрешает префикс пространства имен в области видимости текущего элемента.

System_CAPS_protmethodMemberwiseClone()

Создает неполную копию текущего объекта Object.(Наследуется от Object.)

System_CAPS_pubmethodMoveToAttribute(Int32)

Когда переопределено в производном классе, переходит к атрибуту с указанным индексом.

System_CAPS_pubmethodMoveToAttribute(String)

При переопределении в производном классе перемещает к атрибуту с указанным Name.

System_CAPS_pubmethodMoveToAttribute(String, String)

При переопределении в производном классе перемещает к атрибуту с указанным LocalName и NamespaceURI.

System_CAPS_pubmethodMoveToContent()

Проверяет, является ли текущий узел содержимого (текст пустое пространство, CDATA, Element, EndElement, EntityReference, или EndEntity) узла. Если узел не является узлом содержимого, средство чтения пропускает этот узел и переходит к следующему узлу содержимого или в конец файла. Пропускаются узлы следующих типов: ProcessingInstruction, DocumentType, Comment, Whitespace и SignificantWhitespace.

System_CAPS_pubmethodMoveToContentAsync()

В асинхронном режиме проверяет, является ли текущий узел узлом содержимого. Если узел не является узлом содержимого, средство чтения пропускает этот узел и переходит к следующему узлу содержимого или в конец файла.

System_CAPS_pubmethodMoveToElement()

Когда переопределено в производном классе, переходит к элементу, содержащему текущий узел атрибута.

System_CAPS_pubmethodMoveToFirstAttribute()

Когда переопределено в производном классе, переходит к первому атрибуту.

System_CAPS_pubmethodMoveToNextAttribute()

Когда переопределено в производном классе, переходит к следующему атрибуту.

System_CAPS_pubmethodRead()

Когда переопределено в производном классе, считывает из потока следующий узел.

System_CAPS_pubmethodReadAsync()

Асинхронно считывает следующий узел из потока.

System_CAPS_pubmethodReadAttributeValue()

При переопределении в производном классе разбирает значение атрибута в один или несколько Text, EntityReference, или EndEntity узлов.

System_CAPS_pubmethodReadContentAs(Type, IXmlNamespaceResolver)

Считывает содержимое объекта указанного типа.

System_CAPS_pubmethodReadContentAsAsync(Type, IXmlNamespaceResolver)

Асинхронно считывает содержимое как объект указанного типа.

System_CAPS_pubmethodReadContentAsBase64(Byte[], Int32, Int32)

Считывает содержимое и возвращает раскодированные двоичные байты Base64.

System_CAPS_pubmethodReadContentAsBase64Async(Byte[], Int32, Int32)

Асинхронно считывает содержимое и возвращает декодированные из кодировки Base64 двоичные байты.

System_CAPS_pubmethodReadContentAsBinHex(Byte[], Int32, Int32)

Считывает содержимое и возвращает раскодированные двоичные байты BinHex.

System_CAPS_pubmethodReadContentAsBinHexAsync(Byte[], Int32, Int32)

Асинхронно считывает содержимое и возвращает BinHex раскодированные двоичные байты.

System_CAPS_pubmethodReadContentAsBoolean()

Считывает содержимое текста в текущей позиции как Boolean.

System_CAPS_pubmethodReadContentAsDateTime()

Считывает содержимое текста в текущей позиции как DateTime объект.

System_CAPS_pubmethodReadContentAsDateTimeOffset()

Считывает содержимое текста в текущей позиции как DateTimeOffset объект.

System_CAPS_pubmethodReadContentAsDecimal()

Считывает содержимое текста в текущей позиции как Decimal объект.

System_CAPS_pubmethodReadContentAsDouble()

Считывает текстовое содержимое в текущей позиции как число с плавающей запятой двойной точности.

System_CAPS_pubmethodReadContentAsFloat()

Считывает содержимое текста в текущей позиции как число с плавающей запятой одиночной точности.

System_CAPS_pubmethodReadContentAsInt()

Считывает текстовое содержимое в текущей позиции как 32-разрядное целое число со знаком.

System_CAPS_pubmethodReadContentAsLong()

Считывает текстовое содержимое в текущей позиции как 64-разрядное целое число со знаком.

System_CAPS_pubmethodReadContentAsObject()

Считывает содержимое текста в текущей позиции как Object.

System_CAPS_pubmethodReadContentAsObjectAsync()

Асинхронно считывает содержимое текста в текущей позиции как Object.

System_CAPS_pubmethodReadContentAsString()

Считывает содержимое текста в текущей позиции как String объект.

System_CAPS_pubmethodReadContentAsStringAsync()

Асинхронно считывает содержимое текста в текущей позиции как String объект.

System_CAPS_pubmethodReadElementContentAs(Type, IXmlNamespaceResolver)

Считывает содержимое элемента в качестве требуемого типа.

System_CAPS_pubmethodReadElementContentAs(Type, IXmlNamespaceResolver, String, String)

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

System_CAPS_pubmethodReadElementContentAsAsync(Type, IXmlNamespaceResolver)

Асинхронно считывает содержимое элемента как запрашиваемый тип.

System_CAPS_pubmethodReadElementContentAsBase64(Byte[], Int32, Int32)

Считывает элемент и декодирует содержимое Base64.

System_CAPS_pubmethodReadElementContentAsBase64Async(Byte[], Int32, Int32)

Асинхронно считывает элемент и расшифровывает содержимое Base64.

System_CAPS_pubmethodReadElementContentAsBinHex(Byte[], Int32, Int32)

Считывает элемент и декодирует содержимое BinHex.

System_CAPS_pubmethodReadElementContentAsBinHexAsync(Byte[], Int32, Int32)

Асинхронно считывает элемент и раскодирует BinHex содержимого.

System_CAPS_pubmethodReadElementContentAsBoolean()

Считывает текущий элемент и возвращает содержимое в виде Boolean объекта.

System_CAPS_pubmethodReadElementContentAsBoolean(String, String)

Проверяет, что указанным локальным именем и URI пространства имен таковыми для текущего элемента, затем считывает текущий элемент и возвращает содержимое в виде Boolean объекта.

System_CAPS_pubmethodReadElementContentAsDateTime()

Считывает текущий элемент и возвращает содержимое в виде DateTime объекта.

System_CAPS_pubmethodReadElementContentAsDateTime(String, String)

Проверяет, что указанным локальным именем и URI пространства имен таковыми для текущего элемента, затем считывает текущий элемент и возвращает содержимое в виде DateTime объекта.

System_CAPS_pubmethodReadElementContentAsDecimal()

Считывает текущий элемент и возвращает содержимое в виде Decimal объекта.

System_CAPS_pubmethodReadElementContentAsDecimal(String, String)

Проверяет, что указанным локальным именем и URI пространства имен таковыми для текущего элемента, затем считывает текущий элемент и возвращает содержимое в виде Decimal объекта.

System_CAPS_pubmethodReadElementContentAsDouble()

Считывает текущий элемент и возвращает содержимое как число с плавающей запятой двойной точности.

System_CAPS_pubmethodReadElementContentAsDouble(String, String)

Проверяет, совпадают ли указанные локальное имя и URI пространства имен с таковыми для текущего элемента, затем считывает текущий элемент и возвращает содержимое как число с плавающей запятой двойной точности.

System_CAPS_pubmethodReadElementContentAsFloat()

Считывает текущий элемент и возвращает содержимое как число с плавающей запятой одиночной точности.

System_CAPS_pubmethodReadElementContentAsFloat(String, String)

Проверяет, совпадают ли указанные локальное имя и URI пространства имен с таковыми для текущего элемента, затем считывает текущий элемент и возвращает содержимое как число с плавающей запятой одиночной точности.

System_CAPS_pubmethodReadElementContentAsInt()

Считывает текущий элемент и возвращает содержимое в виде 32-разрядного целого числа со знаком.

System_CAPS_pubmethodReadElementContentAsInt(String, String)

Проверяет, совпадают ли указанные локальное имя и URI пространства имен с таковыми для текущего элемента, затем считывает текущий элемент и возвращает содержимое как 32-разрядное целое число со знаком.

System_CAPS_pubmethodReadElementContentAsLong()

Считывает текущий элемент и возвращает содержимое в виде 64-разрядного целого числа со знаком.

System_CAPS_pubmethodReadElementContentAsLong(String, String)

Проверяет, совпадают ли указанные локальное имя и URI пространства имен с таковыми для текущего элемента, затем считывает текущий элемент и возвращает содержимое как 64-разрядное целое число со знаком.

System_CAPS_pubmethodReadElementContentAsObject()

Считывает текущий элемент и возвращает содержимое в виде Object.

System_CAPS_pubmethodReadElementContentAsObject(String, String)

Проверяет, что указанным локальным именем и URI пространства имен таковыми для текущего элемента, затем считывает текущий элемент и возвращает содержимое в виде Object.

System_CAPS_pubmethodReadElementContentAsObjectAsync()

Асинхронно считывает текущий элемент и возвращает содержимое в виде Object.

System_CAPS_pubmethodReadElementContentAsString()

Считывает текущий элемент и возвращает содержимое в виде String объекта.

System_CAPS_pubmethodReadElementContentAsString(String, String)

Проверяет, что указанным локальным именем и URI пространства имен таковыми для текущего элемента, затем считывает текущий элемент и возвращает содержимое в виде String объекта.

System_CAPS_pubmethodReadElementContentAsStringAsync()

Асинхронно считывает текущий элемент и возвращает содержимое в виде String объекта.

System_CAPS_pubmethodReadElementString()

Считывает элемент, предназначенный только для чтения. Тем не менее, мы рекомендуем использовать ReadElementContentAsString() метода вместо этого, поскольку она предоставляет более простой способ обработки данной операции.

System_CAPS_pubmethodReadElementString(String)

Проверяет, что Name свойства найденного элемента совпадает с указанной строкой перед чтением текстового элемента. Тем не менее, мы рекомендуем использовать ReadElementContentAsString() метода вместо этого, поскольку она предоставляет более простой способ обработки данной операции.

System_CAPS_pubmethodReadElementString(String, String)

Проверяет, что LocalName и NamespaceURI Свойства элемента найденного заданных строк перед чтением текстового элемента. Тем не менее, мы рекомендуем использовать ReadElementContentAsString(String, String) метода вместо этого, поскольку она предоставляет более простой способ обработки данной операции.

System_CAPS_pubmethodReadEndElement()

Проверяет, является ли текущий узел содержимого закрывающим тегом, и позиционирует средство чтения на следующий узел.

System_CAPS_pubmethodReadInnerXml()

Когда переопределено в производном классе, считывает как строку все содержимое, включая разметку.

System_CAPS_pubmethodReadInnerXmlAsync()

Асинхронно считывает в виде строки все содержимое, включая разметку.

System_CAPS_pubmethodReadOuterXml()

Когда переопределено в производном классе, считывает содержимое, включая разметку, представляющую этот узел и все его дочерние узлы.

System_CAPS_pubmethodReadOuterXmlAsync()

Асинхронно считывает содержимое, включая разметку, представляющее этот узел и все его дочерние узлы.

System_CAPS_pubmethodReadStartElement()

Проверяет, является ли текущий узел элементом и перемещает модуль чтения к следующему узлу.

System_CAPS_pubmethodReadStartElement(String)

Проверяет, что текущий узел элементом с заданной Name и перемещает средство чтения на следующий узел.

System_CAPS_pubmethodReadStartElement(String, String)

Проверяет, что текущий узел элементом с заданной LocalName и NamespaceURI и перемещает средство чтения на следующий узел.

System_CAPS_pubmethodReadString()

Когда переопределено в производном классе, считывает содержимое узла элемента или текстового узла в виде строки. Тем не менее, мы рекомендуем использовать ReadElementContentAsString метода вместо этого, поскольку она предоставляет более простой способ обработки данной операции.

System_CAPS_pubmethodReadSubtree()

Возвращает новый XmlReader экземпляр, который может использоваться для считывания текущего узла и всех его потомков.

System_CAPS_pubmethodReadToDescendant(String)

Перемещает XmlReader к следующему элементу-потомку с указанным проверенным именем.

System_CAPS_pubmethodReadToDescendant(String, String)

Перемещает XmlReader к следующему элементу-потомку с указанным локальным именем и URI пространства имен.

System_CAPS_pubmethodReadToFollowing(String)

Выполняет чтение до обнаружения элемента с указанным полным именем.

System_CAPS_pubmethodReadToFollowing(String, String)

Выполняет чтение до обнаружения указанных локального имени и URI пространства имен.

System_CAPS_pubmethodReadToNextSibling(String)

Перемещает XmlReader следующему родственному элементу с указанным проверенным именем.

System_CAPS_pubmethodReadToNextSibling(String, String)

Переводит XmlReader к следующему элементу того же уровня с указанным локальным именем и URI пространства имен.

System_CAPS_pubmethodReadValueChunk(Char[], Int32, Int32)

Считывает большие потоки текста, внедренного в XML-документ.

System_CAPS_pubmethodReadValueChunkAsync(Char[], Int32, Int32)

Асинхронно считывает большие потоки текста, внедренного в XML-документ.

System_CAPS_pubmethodResolveEntity()

При переопределении в производном классе разрешает ссылки на сущности для EntityReference узлов.

System_CAPS_pubmethodSkip()

Пропускает дочерний узел текущего узла.

System_CAPS_pubmethodSkipAsync()

Асинхронно пропускает дочерние узлы текущего узла.

System_CAPS_pubmethodToString()

Возвращает строковое представление текущего объекта.
(Наследуется от Object.)

System_CAPS_noteПримечание

Чтобы просмотреть исходный код .NET Framework для этого типа, см. раздел Reference Source. Просмотр исходного кода в Интернете, загружаемом справочнике для автономного просмотра и пошагово источники (включая исправления и обновления) во время отладки; see instructions.

XmlReader предоставляет однопроходный, только для чтения доступ к XML-данных в документ изdocumentdb или поток. Этот класс соответствует W3C Extensible Markup Language (XML) 1.0 (fourth edition) и Namespaces in XML 1.0 (third edition) рекомендации.

XmlReaderметоды позволяют перемещаться по данным XML и считывать содержимое узла. Свойства класса отражают значение текущего узла, — где модуль чтения. ReadState Значение свойства указывает на текущее состояние средства чтения XML. Например, свойство имеет значение InitialXmlReader.Read метод и ClosedXmlReader.Close метод. XmlReader также предоставляет проверки согласованности данных и проверки на соответствие DTD или схеме.

XmlReaderиспользует модель извлечения для получения данных. Эта модель:

  • Управление состоянием упрощается благодаря усовершенствованием процедурного естественным, сверху вниз.

  • Поддерживает несколько входных потоков и слоев.

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

  • Поддерживает выборочной обработки. Клиент может пропускать элементы и обрабатывать те, которые представляют интерес для приложения. Можно также задать свойства заранее, чтобы управлять обработкой потока XML (например, normalization).

Содержание

Создание средств чтения XML
Проверка XML-данных
Согласованность данных
Навигация по узлам
Чтение XML-элементы
Чтение XML-атрибуты
Чтение XML-содержимое
Преобразование в типы CLR
Асинхронное программирование
Замечания по безопасности

Используйте Create метод для создания XmlReaderэкземпляра.

Несмотря на то, что платформа .NET Framework предоставляет конкретные реализации XmlReader класса, такие как XmlTextReader, XmlNodeReader, и XmlValidatingReader классы, рекомендуется использовать специализированные классы только в этих сценариях:

  • Если требуется readan поддерева XML DOM из XmlNode используйте XmlNodeReader класса. (Тем не менее, этот класс не поддерживает проверку DTD или схемы).

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

Чтобы указать набор компонентов, которые нужно включить в средство чтения XML, передайте System.Xml.XmlReaderSettings объект Create метод. Можно использовать один System.Xml.XmlReaderSettings объекта для создания нескольких читателей с одинаковой функциональностью, или изменить System.Xml.XmlReaderSettingsобъекта, чтобы создать новый модуль чтения с другим набором функций. Можно также легко добавить компоненты к существующему средству чтения.

Если вы не используетеSystem.Xml.XmlReaderSettingsобъекта используются параметры по умолчанию. В разделе Create справочной странице для сведения.

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

Для определения структуры XML-документа и его связи элемента, типы данных и ограничения содержимого, используется определение типа документа (DTD) или схемы языка XSD для определения схемы XML. XML-документ считается сформированным правильно, если он соответствует всем синтаксическим требованиям W3C XML 1.0 Recommendation. Он считается допустимым, если он имеет правильный формат и не соответствует ограничениям, определенным в его DTD или схемы. (См. W3C XML Schema Part 1: Structures и W3C XML Schema Part 2: Datatypesрекомендации.) Следовательно, хотя все действительные XML-документы являются документами правильного формата, не все XML-документы правильного формата являются действительными.

Можно проверить данные на соответствие DTD, встроенной XSD-схемы или схемы XSD хранятся в XmlSchemaSet объекта (кэша); эти сценарии описаны на Create страницу справки. XmlReader не поддерживает проверку схемы XML-Data Reduced (XDR).

Используйте следующие параметры на XmlReaderSettings класса, чтобы указать тип проверки, если таковые имеются,XmlReader поддерживает экземпляра.

Используйте этот XmlReaderSettings член

Чтобы указать

DtdProcessing Свойство

Следует ли разрешить обработку DTD. По умолчанию обработка определения DTD не разрешается.

Свойство ValidationType

Проверить ли средство чтения данных и тип выполняемой проверки (DTD или схемы). По умолчанию проверка данных не выполняется.

Событие ValidationEventHandler

Обработчик событий для получения данных о событиях проверки. Если обработчик события не предоставлен, при первой ошибке проверки вызывается исключение XmlException.

Свойство ValidationFlags

Параметры дополнительной проверки через XmlSchemaValidationFlags члены перечисления:

  • AllowXmlAttributes-Разрешать XML-атрибуты (xml:*) в экземплярах документов, даже в том случае, если они не определены в схеме. Атрибуты проверяются на основе их типа данных. В разделе XmlSchemaValidationFlags справочной странице для настройки для использования в определенных сценариях. (Отключено по умолчанию).

  • ProcessIdentityConstraints --Обрабатывать ограничения идентификаторов (xs:ID, xs:IDREF, xs:key, xs:keyref, xs:unique) во время проверки. (Включено по умолчанию).

  • ProcessSchemaLocation --Обрабатывать схемы, указанные в xsi:schemaLocation или xsi:noNamespaceSchemaLocation атрибута. (Включено по умолчанию).

  • ProcessInlineSchema--Обрабатывать встроенных схем XML во время проверки. (Отключено по умолчанию).

  • ReportValidationWarnings--Сообщать о событиях при возникновении предупреждения проверки. Предупреждение обычно формируется при отсутствии определения DTD или схемы XML для проверки конкретного элемента или атрибута. Параметр ValidationEventHandler используется для уведомления. (Отключено по умолчанию).

Schemas

XmlSchemaSet, используемый при проверке данных.

Свойство XmlResolver

XmlResolverДля разрешения и доступ к внешним ресурсам. Это может включать внешние сущности, такие как DTD, схемы и любой xs:include или xs:import элементов, содержащихся в схеме XML. Если не указать XmlResolver, XmlReader использует значение по умолчанию XmlUrlResolver без учетных данных пользователя.

Средства чтения XML, созданные Create methodmeet следующие требования соответствия по умолчанию:

  • Новые строки и значения атрибутов нормализуются в соответствии с W3C XML 1.0 Recommendation.

  • Все сущности разворачиваются автоматически.

  • Атрибуты по умолчанию, объявленные в определении типа документа добавляются всегда, даже в том случае, если средство чтения не проверять.

  • Допускается объявление префикса XML, сопоставленного с правильным URI пространства имен XML.

  • Имена нотаций в одном NotationType объявление атрибута иNmTokens в одном Enumeration атрибут declarationare distinct.

Используйте эти XmlReaderSettings Свойства, чтобы указать тип проверок согласованности вы хотите включить:

Используйте этот XmlReaderSettings свойство

Чтобы

default

Свойство CheckCharacters

Включить или отключить следующие проверки:

  • Символы находятся в пределах допустимых символов XML в соответствии с 2.2 Characters разделе рекомендаций W3C XML 1.0.

  • Все XML-имена допустимы, как определяется 2.3 Common Syntactic Constructs разделе рекомендаций W3C XML 1.0.

Если значение этого свойства true (по умолчанию), XmlException исключение, если XML-файл содержит недопустимые знаки или недопустимых имен XML (например, имя элемента начинается с цифры).

Символ и проверка имен включен.

Параметр CheckCharacters для false отключает проверку символов для ссылок на сущности символов. Если средство чтения обрабатывает текстовые данные, всегда проверяется, что XML-имена являются допустимыми, независимо от этого параметра.

System_CAPS_noteПримечание

Рекомендация XML 1.0 требует согласованности на уровне документа, если присутствует DTD. Таким образом Если модуль чтения настроен для поддержки ConformanceLevel.Fragment, но данные XML содержат определения типа документа (DTD), XmlException возникает исключение.

Свойство ConformanceLevel

Выберите уровень соответствия для применения.

  • Document. Соответствует правилам для well-formed XML 1.0 document.

  • Fragment. Соответствует правилам, фрагмент документа правильного формата, который используется как external parsed entity.

  • Auto. Соответствует уровню решил средством чтения.

Если данные не согласованы, XmlException исключение.

Document

Текущий узел является XML-узел, на котором расположено средство чтения XML. Все XmlReaderметоды выполнения операций с учетом этого узла и всех XmlReaderсвойства отражают значение текущего узла.

Следующие методы позволяют легко перемещаться по узлам и анализа данных.

Используйте этот XmlReaderSettings метод

Чтобы

Read

Чтения первого узла и перемещаться по узел один поток за раз. Такие вызовы обычно выполняются в while цикла.

Используйте NodeType свойство для получения типа (например, атрибут, комментарий, элемента и т. д) текущего узла.

Skip

Пропустите дочерние узлы текущего узла и перейдите к следующему узлу.

MoveToContent и MoveToContentAsync.

Пропускать узлы без содержимого и перемещение к следующему узлу содержимого или в конец файла.

Узлы содержимого не включают ProcessingInstruction, DocumentType, Comment, Whitespace, и SignificantWhitespace.

Узлам содержимого относятся текст пустое пространство, CDATA, EntityReference , иEndEntity.

ReadSubtree

Чтение элемента и всех его дочерних элементов и возвращается новый XmlReader экземпляр значение ReadState.Initial.

Этот метод полезен для создания границы вокруг элементов XML; Например если требуется передать данные другому компоненту для обработки и требуется ограничить объем данных доступны компонента.

В разделе XmlReader.Read справочника, посвященных пример перехода по текстовый узел один поток за раз и отображения типа каждого узла.

Следующие разделы описывают, как можно получить определенные типы данных, такие как элементы, атрибуты и типизированных данных.

В следующей таблице перечислены методы и свойства, XmlReader предоставляет класс для обработки элементов. После того, как объект XmlReader позиционируется на элементе, свойства узла, например Name, отражают значения этого элемента. Кроме описанных ниже членов для обработки элементов могут также использоваться любые методы и свойства класса XmlReader. Например, для чтения содержимого элемента используется метод ReadInnerXml.

System_CAPS_noteПримечание

В разделе 3.1 W3C XML 1.0 Recommendation определения теги начала, окончания теги и пустой элемент.

Используйте этот XmlReader член

Чтобы

Метод IsStartElement

Проверьте, является ли текущий узел открывающим тегом или пустым тегом элемента.

Метод ReadStartElement

Проверьте, что текущий узел является элементом и перемещает средство чтения на следующий узел (вызовы IsStartElement следуют Read).

Метод ReadEndElement

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

Метод ReadElementString

Чтение текстового элемента.

Метод ReadToDescendant

Перемещает средство чтения XML для следующего элемента потомков (дочерних), имеющий указанное имя.

Метод ReadToNextSibling

Перемещает средство чтения XML для следующего одноуровневого элемента с указанным именем.

Свойство IsEmptyElement

Установите флажок, если текущий элемент закрывающий тег. Например:

  • <item num="123"/> (IsEmptyElement имеет значение true);

  • <item num="123"> </item> (IsEmptyElementfalse, несмотря на то, что содержимое элемента является пустым.)

Пример чтения текстовое содержимое элементов в разделе ReadString метод. Следующий пример обрабатывает элементы с помощью while цикла.

while (reader.Read()) {
  if (reader.IsStartElement()) {
    if (reader.IsEmptyElement)
      Console.WriteLine("<{0}/>", reader.Name);
    else {
      Console.Write("<{0}> ", reader.Name);
      reader.Read(); // Read the start tag.
      if (reader.IsStartElement())  // Handle nested elements.
        Console.Write("\r\n<{0}>", reader.Name);
      Console.WriteLine(reader.ReadString());  //Read the text content of the element.
    }
  } 
} 

XML-атрибуты чаще всего находятся на элементы, но также допускается объявление XML и узлах типа документа.

При расположении на узле элемента MoveToAttribute позволяет перейти по списку атрибутов элемента. Обратите внимание, что после MoveToAttribute был вызван, свойства узла такие как Name, NamespaceURI, и Prefix отражают свойства этого атрибута, принадлежит не свойствами элемента атрибута.

XmlReader Класс предоставляет следующие методы и свойства для чтения и обработки атрибутов для элементов.

Используйте этот XmlReader член

Чтобы

Свойство HasAttributes

Проверьте, имеются ли у текущего узла какие-либо атрибуты.

Свойство AttributeCount

Получите количество атрибутов текущего элемента.

Метод MoveToFirstAttribute

Переместите первый атрибут в элемент.

Метод MoveToNextAttribute

Перемещение к следующему атрибуту в элементе.

Метод MoveToAttribute

Переместить указанный атрибут.

GetAttribute метод или Item свойство

Возвращает значение указанного атрибута.

Свойство IsDefault

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

Метод MoveToElement

Переместите элемент, которому принадлежит текущий атрибут. Используйте этот метод для возврата элемента после просмотра его атрибутов.

Метод ReadAttributeValue

Синтаксический анализ значения атрибута в один или несколько Text, EntityReference, или EndEntityузлов.

Для обработки атрибутов можно использовать и любые обычные методы и свойства объекта XmlReader. Например, если объект XmlReader расположен на атрибуте, свойства Name и Value будут отражать значения этого атрибута. Также можно использовать любые методы Read содержимого, чтобы получить значение атрибута.

В этом примере используется AttributeCount свойство для просмотра всех атрибутов в элементе.

// Display all attributes.
if (reader.HasAttributes) {
  Console.WriteLine("Attributes of <" + reader.Name + ">");
  for (int i = 0; i < reader.AttributeCount; i++) {
    Console.WriteLine("  {0}", reader[i]);
  }
  // Move the reader back to the element node.
  reader.MoveToElement(); 
}

В этом примере используется MoveToNextAttribute метод while цикл для перемещения по атрибутам.

if (reader.HasAttributes) {
  Console.WriteLine("Attributes of <" + reader.Name + ">");
  while (reader.MoveToNextAttribute()) {
    Console.WriteLine(" {0}={1}", reader.Name, reader.Value);
  }
  // Move the reader back to the element node.
  reader.MoveToElement();
}

Считывание атрибутов в XML-декларации узлов

Средство чтения XML, помещенный на узел XML-декларации, Value свойство возвращает версии, автономные и сведений о кодировке в одну строку. XmlReader объекты, созданные Create метода XmlTextReader класса и XmlValidatingReaderкласс предоставляет версии, автономные и кодирования элементов как атрибуты.

Считывание атрибутов на узлах типа документа

Если средство чтения XML, располагается в узел типа документа, GetAttribute метод и Item свойство может использоваться для возврата значения для литералов SYSTEM и PUBLIC. Например, вызов метода reader.GetAttribute("PUBLIC") возвращает значение PUBLIC.

Чтение атрибутов для узлов инструкций по обработке

Если XmlReader расположен на узле инструкций по обработке, свойство Value возвращает текстовое содержимое целиком. Элементы в узел инструкции обработки, не рассматриваются как атрибуты. Не удается прочитать их с GetAttribute или MoveToAttribute метод.

Класс XMLReader включает следующие элементы, которые читать содержимое XML-файла и возвращает содержимое как строковые значения. (Возвращаемые типы среды CLR, в разделе следующий раздел.)

Используйте этот XmlReader член

Чтобы

Свойство Value

Получите текстовое содержимое текущего узла. Возвращаемое значение зависит от типа узла; в разделе Value справочной странице для сведения.

Метод ReadString

Получение содержимое элемента или текстового узла в виде строки. Этот метод останавливается на инструкции по обработке и комментарии.

Дополнительные сведения о том, как этот метод обрабатывает типы определенного узла в разделе ReadString справочной странице.

Методы ReadInnerXml и ReadInnerXmlAsync

Получите все содержимое текущего узла, включая разметку, но не открывающий и закрывающий теги. Например для:

<node>this<child id="123"/></node>

ReadInnerXml Возвращает:

this<child id="123"/>

Методы ReadOuterXml и ReadOuterXmlAsync

Получите все содержимое текущего узла и его дочерних элементов, включая теги разметки и начала и окончания. Например для:

<node>this<child id="123"/></node>

ReadOuterXml Возвращает:

<node>this<child id="123"/></node>

Можно использовать члены XmlReader класса (перечислены в таблице ниже) для чтения XML-данных и возвращения значения как общий язык типы среды CLR вместо строк. Эти элементы позволяют получать значения в представление, которое лучше всего подходит для задач по написанию кода без необходимости вручную проанализировать или преобразовать строковых значений.

  • ReadElementContentAs методы могут вызываться только для типов узлов элементов. Их нельзя использовать для элементов, содержащих дочерние элементы или смешанное содержимое. Объект XmlReader при вызове считывает открывающий тег, читает содержимое элемента и перемещается за закрывающий тег элемента. Инструкции по обработке и комментарии пропускаются, а сущности развертываются.

  • ReadContentAsсчитывают содержимое текста в текущей позиции средства чтения и если XML-данных не имеет схемы или введите сведения, связанные с ним, преобразовать текстовое содержимое в требуемый тип возвращаемого значения. Текст, пробелы, значимые пробелы и разделы CDATA объединяются. Комментарии и инструкции по обработке пропускаются, и ссылки на сущности разрешаются автоматически.

XmlReader Класс использует правилами, определенными в W3C XML Schema Part 2: Datatypesрекомендаций.

Используйте этот XmlReaderметод

Чтобы вернуть этот тип CLR

ReadContentAsBoolean и ReadElementContentAsBoolean.

Boolean

ReadContentAsDateTime и ReadElementContentAsDateTime.

DateTime

ReadContentAsDouble и ReadElementContentAsDouble.

Double

ReadContentAsLong и ReadElementContentAsLong.

Int64

ReadContentAsInt и ReadElementContentAsInt.

Int32

ReadContentAsString и ReadElementContentAsString.

String

ReadContentAs и ReadElementContentAs.

Указать тип returnType параметр

ReadContentAsObject и ReadElementContentAsObject.

Наиболее подходящего типа, в соответствии с XmlReader.ValueType свойство. В разделе Поддержка типов в классах System.Xml для сведений о сопоставлении.

Если элемент невозможно легко преобразовать в тип CLR из-за его формат, чтобы обеспечить успешное преобразование можно использовать сопоставления схем. В следующем примере используется XSD-файл для преобразования hire-date элемент xs:date тип, а затем использует ReadElementContentAsDateTime для возврата элемента как DateTime объект.

Входные данные (hireDate.xml):

<employee xmlns="urn:empl-hire">
    <ID>12365</ID>
    <hire-date>2003-01-08</hire-date>
    <title>Accountant</title>
</employee>

Схема (hireDate.xsd):

<?xml version="1.0"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="urn:empl-hire" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="employee">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ID" type="xs:unsignedShort" />
        <xs:element name="hire-date" type="xs:date" />
        <xs:element name="title" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Код:

// Create a validating XmlReader object. The schema 
// provides the necessary type information.
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.Schemas.Add("urn:empl-hire", "hireDate.xsd");
using (XmlReader reader = XmlReader.Create("hireDate.xml", settings)) {

  // Move to the hire-date element.
  reader.MoveToContent();
  reader.ReadToDescendant("hire-date");

  // Return the hire-date as a DateTime object.
  DateTime hireDate = reader.ReadElementContentAsDateTime();
  Console.WriteLine("Six Month Review Date: {0}", hireDate.AddMonths(6));
}

Результат

Six Month Review Date:  7/8/2003 12:00:00 AM

Большинство XmlReader методы имеют асинхронной аналогов, имеющих «Async» в конце их имена методов. Например, асинхронный эквивалент ReadContentAsObjectReadContentAsObjectAsync.

Следующие методы могут использоваться с асинхронными вызовами метода:

В следующих разделах описаны асинхронного использования для методов, которые не имеют аналогов, асинхронные.

ReadStartElement, метод

public static async Task ReadStartElementAsync(this XmlReader reader, string localname, string ns)
{
    if (await reader.MoveToContentAsync() != XmlNodeType.Element)
    {
        throw new InvalidOperationException(reader.NodeType.ToString() + " is an invalid XmlNodeType");
    }
    if ((reader.LocalName == localname) && (reader.NamespaceURI == ns))
    {
        await reader.ReadAsync();
    }
    else
    {
        throw new InvalidOperationException("localName or namespace doesn’t match");
    }
}

Метод ReadEndElement

public static async Task ReadEndElementAsync(this XmlReader reader)
{
    if (await reader.MoveToContentAsync() != XmlNodeType.EndElement)
    {
        throw new InvalidOperationException();
    }
    await reader.ReadAsync();
}

Метод ReadToNextSibling

public static async Task<bool> ReadToNextSiblingAsync(this XmlReader reader, string localName, string namespaceURI)
{
    if (localName == null || localName.Length == 0)
    {
        throw new ArgumentException("localName is empty or null");
    }
    if (namespaceURI == null)
    {
        throw new ArgumentNullException("namespaceURI");
    }

    // atomize local name and namespace
    localName = reader.NameTable.Add(localName);
    namespaceURI = reader.NameTable.Add(namespaceURI);

    // find the next sibling
    XmlNodeType nt;
    do
    {
        await reader.SkipAsync();
        if (reader.ReadState != ReadState.Interactive)
            break;
        nt = reader.NodeType;
        if (nt == XmlNodeType.Element &&
             ((object)localName == (object)reader.LocalName) &&
             ((object)namespaceURI ==(object)reader.NamespaceURI))
        {
            return true;
        }
    } while (nt != XmlNodeType.EndElement && !reader.EOF);

    return false;
}

Метод ReadToFollowing

public static async Task<bool> ReadToFollowingAsync(this XmlReader reader, string localName, string namespaceURI)
{
    if (localName == null || localName.Length == 0)
    {
        throw new ArgumentException("localName is empty or null");
    }
    if (namespaceURI == null)
    {
        throw new ArgumentNullException("namespaceURI");
    }

    // atomize local name and namespace
    localName = reader.NameTable.Add(localName);
    namespaceURI = reader.NameTable.Add(namespaceURI);

    // find element with that name
    while (await reader.ReadAsync())
    {
        if (reader.NodeType == XmlNodeType.Element && ((object)localName == (object)reader.LocalName) && ((object)namespaceURI == (object)reader.NamespaceURI))
        {
            return true;
        }
    }
    return false;
}

Метод ReadToDescendant

public static async Task<bool> ReadToDescendantAsync(this XmlReader reader, string localName, string namespaceURI)
{
    if (localName == null || localName.Length == 0)
    {
        throw new ArgumentException("localName is empty or null");
    }
    if (namespaceURI == null)
    {
        throw new ArgumentNullException("namespaceURI");
    }
    // save the element or root depth
    int parentDepth = reader.Depth;
    if (reader.NodeType != XmlNodeType.Element)
    {
        // adjust the depth if we are on root node
        if (reader.ReadState == ReadState.Initial)
        {
            parentDepth--;
        }
        else
        {
            return false;
        }
    }
    else if (reader.IsEmptyElement)
    {
        return false;
    }

    // atomize local name and namespace
    localName = reader.NameTable.Add(localName);
    namespaceURI = reader.NameTable.Add(namespaceURI);

    // find the descendant
    while (await reader.ReadAsync() && reader.Depth > parentDepth)
    {
        if (reader.NodeType == XmlNodeType.Element && ((object)localName == (object)reader.LocalName) && ((object)namespaceURI == (object)reader.NamespaceURI))
        {
            return true;
        }
    }
    return false;
}

Учитывайте следующее при работе с XmlReader класса:

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

  • Не включайте обработку DTD, если вас беспокоит отказ в обслуживании проблемы, или если вы имеете дело с ненадежными источниками. Обработка DTD отключена по умолчанию для XmlReader объектов, созданных Create метод.

    Если обработка DTD включена, то с помощью класса XmlSecureResolver можно ограничить ресурсы, доступные для объекта XmlReader. Также можно создавать приложения, чтобы обработка XML памяти и ограниченное время. Например можно настроить ограничения времени ожидания в приложении ASP.NET.

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

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

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

  • ProcessInlineSchema И ProcessSchemaLocation флаги проверки XmlReaderSettings объекта не установлены по умолчанию. Это позволяет защитить объект XmlReader от атак на основе схем при обработке XML-данных из ненадежного источника. Если эти флаги установлены, для разрешения расположения схем, обнаруженных в экземпляре документа в объекте XmlResolver, используется арбитр XmlReaderSettings объекта XmlReader. Если XmlResolver свойству null, расположения схем не разрешена даже в том случае, если ProcessInlineSchema и ProcessSchemaLocation установлены флаги проверки.

    Схемы, добавленные во время проверки, добавляют новые типы и могут изменить результат проверки документа. Поэтому следует разрешать только внешние схемы из доверенных источников.

    Корпорация Майкрософт рекомендует отключить ProcessIdentityConstraints флаг при проверке ненадежных, больших XML-документов в сценарии высокой доступности по схеме с ограничениями удостоверения через большую часть документа. Этот флаг включен по умолчанию.

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

    • Ограничить размер документа, установив MaxCharactersInDocument свойство.

    • Максимальное число символов, которые возникают вследствие расширения сущностей, задав MaxCharactersFromEntities свойство.

    • Создание пользовательского IStream реализацию XmlReader.

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

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

  • Объекты XmlReaderSettings могут содержать конфиденциальные сведения, например учетные данные пользователей. Ненадежный компонент может использовать объект XmlReaderSettings и его учетные данные пользователя, чтобы создавать объекты XmlReader для считывания данных. Будьте внимательны при кэшировании XmlReaderSettings объекты, или при передаче XmlReaderSettings объекта из одного компонента в другой.

  • Не следует принимать вспомогательные компоненты, например объекты NameTable, XmlNamespaceManager и XmlResolver, из ненадежных источников.

В следующем примере кода показано, как использовать асинхронную APIto синтаксического анализа XML.

async Task TestReader(System.IO.Stream stream)
{
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.Async = true;

    using (XmlReader reader = XmlReader.Create(stream, settings))
    {
        while (await reader.ReadAsync())
        {
            switch (reader.NodeType)
            {
                case XmlNodeType.Element:
                    Console.WriteLine("Start Element {0}", reader.Name);
                    break;
                case XmlNodeType.Text:
                    Console.WriteLine("Text Node: {0}",
                             await reader.GetValueAsync());
                    break;
                case XmlNodeType.EndElement:
                    Console.WriteLine("End Element {0}", reader.Name);
                    break;
                default:
                    Console.WriteLine("Other node {0} with value {1}",
                                    reader.NodeType, reader.Value);
                    break;
            }
        }
    }
}

Универсальная платформа Windows
Доступно с 8
.NET Framework
Доступно с 1.1
Переносимая библиотека классов
Поддерживается в: переносимые платформы .NET
Silverlight
Доступно с 2.0
Windows Phone Silverlight
Доступно с 7.0
Windows Phone
Доступно с 8.1

Любые открытые статические элементы ( Предоставлен общий доступ в Visual Basic) этого типа являются потокобезопасными. Потокобезопасность элементов экземпляров не гарантируется.

Вернуться в начало
Показ: