XmlReader.ReadContentAs(Type, IXmlNamespaceResolver) Метод

Определение

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

public:
 virtual System::Object ^ ReadContentAs(Type ^ returnType, System::Xml::IXmlNamespaceResolver ^ namespaceResolver);
public virtual object ReadContentAs (Type returnType, System.Xml.IXmlNamespaceResolver namespaceResolver);
public virtual object ReadContentAs (Type returnType, System.Xml.IXmlNamespaceResolver? namespaceResolver);
abstract member ReadContentAs : Type * System.Xml.IXmlNamespaceResolver -> obj
override this.ReadContentAs : Type * System.Xml.IXmlNamespaceResolver -> obj
Public Overridable Function ReadContentAs (returnType As Type, namespaceResolver As IXmlNamespaceResolver) As Object

Параметры

returnType
Type

Тип возвращаемого значения.

Примечание. С выпуском платформы .NET Framework 3.5 значение параметра returnType может иметь тип DateTimeOffset.

namespaceResolver
IXmlNamespaceResolver

Объект IXmlNamespaceResolver, используемый для разрешения любых префиксов пространств имен, имеющих отношение к преобразованию типов. Например, этот объект можно использовать при преобразовании объекта XmlQualifiedName в xs:string.

Это значение может быть равно null.

Возвращаемое значение

Object

Объединенное текстовое содержимое или значение атрибута, преобразованное в требуемый тип.

Исключения

Содержимое имеет неверный формат для типа целевого объекта.

Недопустимая попытка приведения.

Значение returnType равно null.

Текущий узел не принадлежит к поддерживаемому типу узлов. Дополнительные сведения приведены в таблице ниже.

-или-

Метод XmlReader вызван перед завершением предыдущей асинхронной операции. В этом случае возникает исключение InvalidOperationException с сообщением "Асинхронная операция уже выполняется".

Чтение значения Decimal.MaxValue.

Примеры

В следующем примере метод используется ReadContentAs для возврата содержимого элемента Colors в массив объектов String.

using (XmlReader reader = XmlReader.Create("dataFile_2.xml")) {
      reader.ReadToDescendant("item");

      reader.MoveToAttribute("colors");
      string[] colors = (string[]) reader.ReadContentAs(typeof(string[]),null);
      foreach (string color in colors) {
         Console.WriteLine("Colors: {0}", color);
      }             		
}
Using reader As XmlReader = XmlReader.Create("dataFile_2.xml")

  reader.ReadToDescendant("item")
              
  reader.MoveToAttribute("colors")
  Dim colors As String() = CType(reader.ReadContentAs(GetType(String()), Nothing), String())
  Dim color As String
  For Each color In  colors
    Console.WriteLine("Colors: {0}", color)
  Next color
          
End Using

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

<root>
  <item sale-item='true' productID='123456' colors='blue green black'>
    <price>9.95</price>
  </item>
  <item sale-item='false' productID='124390'>
    <price>5.95</price>
  </item>
  <item sale-item='true' productID='53298'>
    <price>12.95</price>
  </item>
</root>

Комментарии

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

Этот метод используется для чтения, преобразования при необходимости и возврата элементов атомарных значений из содержимого текущего узла. Если входной тип является допустимым сопоставлением для типа текущего узла, возвращается экземпляр целевого типа, содержащий значение текущего узла. XmlReaderСписок сопоставлений по умолчанию см. в разделе "Примечания" на странице справки.

Например, если у вас есть следующий XML-текст:

<elem>123 <!-- comment --> <?pi my_text?> 456 <?pi another_pi?></elem>  

Если данные типизированы и массив строк предоставляется ReadContentAs вызову метода, то целочисленные значения преобразуются из строк в соответствии со списком допустимых сопоставлений типов CLR.

Если данные не типизированы и в вызове метода передается массив строк ReadContentAs , содержимое разбивается на отдельные строки. Массив, содержащий две строки, возвращается со значениями "123" и "456". Пробелы не сохраняются в содержимом.

Как правило, при чтении нетипизированных данных содержимое анализируется в соответствии с предоставленным типом. Например, если в вызове метода передается целочисленный массив, ReadContentAs строка анализируется в массив целых чисел {123,456} .

В следующем примере текст XML не отделяется пробелами.

<elem>123<!-- comment --><?pi my_text?>456789<?pi another_pi?></elem>  

Если содержимое не типизировано и в вызове метода передается массив строк, ReadContentAs то возвращается массив, содержащий одну объединенную строку со значением "123456789".

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

Тип узла XML Возвращаемое значение Поведение модуля чтения
Text

CDATA

Whitespace

SignificantWhitespace

EntityReference

EndEntity
Объединенное содержимое узлов текста, CDATA, пробелов и значимых пробелов, преобразованное в необходимый тип. Перемещается к следующему тегу начального или конечного элемента. Ссылки на сущности автоматически раскрываются.
Attribute Аналогично вызову XmlConvert.ToXxx для значения атрибута. Средство чтения остается в текущей позиции.
Comment

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

XmlDeclaration

None

Document

DocumentType

Notation

Entity

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

Дополнительные сведения см. в подразделе "Примечания" на XmlReader странице справочника и в рекомендациях консорциума W3C по XML-схеме часть 2: типы данных.

Асинхронную версию этого метода см. в разделе ReadContentAsAsync .

Применяется к