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
.
Возвращаемое значение
Объединенное текстовое содержимое или значение атрибута, преобразованное в требуемый тип.
Исключения
Содержимое имеет неверный формат для типа целевого объекта.
Недопустимая попытка приведения.
Значение returnType
равно null
.
Текущий узел не принадлежит к поддерживаемому типу узлов. Дополнительные сведения приведены в таблице ниже.
-или-
Метод XmlReader вызван перед завершением предыдущей асинхронной операции. В этом случае возникает исключение InvalidOperationException с сообщением "Асинхронная операция уже выполняется".
Чтение значения Decimal.MaxValue
.
Примеры
В следующем примере метод используется ReadContentAs для возврата содержимого элемента colors в массив строковых объектов.
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 страницы и рекомендации по xml-схеме W3C, часть 2. Рекомендации по типам данных .
Асинхронная версия этого метода см. в разделе ReadContentAsAsync.