XmlReader.ReadContentAs(Type, IXmlNamespaceResolver) Metoda

Definice

Přečte obsah jako objekt zadaného typu.

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

Parametry

returnType
Type

Typ hodnoty, která se má vrátit.

Poznámka S vydáním rozhraní .NET Framework 3.5 teď může být hodnota returnType parametru typem DateTimeOffset .

namespaceResolver
IXmlNamespaceResolver

Objekt IXmlNamespaceResolver , který se používá k překladu předpon oboru názvů souvisejících s převodem typů. To lze například použít při převodu XmlQualifiedName objektu na objekt .xs:string

Tato hodnota může být null.

Návraty

Zřetězený textový obsah nebo hodnota atributu byla převedena na požadovaný typ.

Výjimky

Obsah není ve správném formátu pro cílový typ.

Pokus o přetypování není platný.

Hodnota returnType je null.

Aktuální uzel není podporovaným typem uzlu. Podrobnosti jsou v následující tabulce.

nebo

Před XmlReader dokončením předchozí asynchronní operace byla volána metoda. V tomto případě InvalidOperationException je vyvolán zpráva "Asynchronní operace už probíhá".

Číst Decimal.MaxValue.

Příklady

Následující příklad používá metodu ReadContentAs k vrácení obsahu prvku colors do pole řetězcových objektů.

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

Příklad používá dataFile_2.xml soubor jako vstup.

<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>

Poznámky

Tato metoda přečte textový obsah na aktuální pozici čtenáře a převede ho na požadovaný návratový typ. Text, prázdné znaky, významné prázdné znaky a sekce CDATA jsou zřetězeny. Komentáře a pokyny ke zpracování se přeskočí a odkazy na entity se automaticky přeloží.

Tato metoda se používá ke čtení, převodu v případě potřeby a vrácení položek atomické hodnoty z aktuálního obsahu uzlu. Pokud je vstupním typem platné mapování pro typ aktuálního uzlu, vrátí se instance cílového typu obsahující hodnotu aktuálního uzlu. Seznam výchozích mapování najdete v části Poznámky na XmlReader referenční stránce.

Pokud jste například měli následující text XML:

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

Pokud jsou data zadána a řetězcové pole je zadáno volání ReadContentAs metody, pak celočíselné hodnoty jsou převedeny z řetězců podle seznamu platných mapování typů CLR.

Pokud jsou data nezadaná a do volání metody je zadáno ReadContentAs pole řetězců, obsah se analyzuje do samostatných řetězců. Vrátí se pole obsahující dva řetězce s hodnotami 123 a 456. Mezery se neuchovávají z obsahu.

Obecně platí, že při čtení nezatypovaných dat se obsah analyzuje podle zadaného typu. Pokud je například do volání metody zadáno ReadContentAs celočíselné pole, řetězec se analyzuje do pole celých čísel {123,456}.

V následujícím příkladu není text XML oddělen mezerami.

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

Pokud je obsah nezadaná a do volání metody je zadáno ReadContentAs pole řetězců, vrátí se pole obsahující jeden zřetězený řetězec s hodnotou "123456789".

Následující tabulka popisuje, jak tato metoda zpracovává jednotlivé typy uzlů.

Xmlnodetype Návratová hodnota Chování čtenáře
Text

CDATA

Whitespace

SignificantWhitespace

EntityReference

EndEntity
Zřetězený obsah textu, CDATA, prázdného místa a významných uzlů prázdných znaků převedených na požadovaný typ. Přesune se na další počáteční prvek nebo značku koncového prvku. Odkazy na entity se automaticky rozbalí.
Attribute Stejné jako volání XmlConvert.ToXxx hodnoty atributu. Čtenář zůstane v aktuální pozici.
Comment

ProcessingInstruction
Ignoruje instrukce zpracování (PI) nebo komentář a přečte zřetězený textový obsah, který následuje za PI nebo komentářem. Přesune se na další počáteční prvek nebo značku koncového prvku. Odkazy na entity se automaticky rozbalí.
EndElement Prázdný řetězec. Čtenář zůstane v aktuální pozici.
Element

XmlDeclaration

None

Document

DocumentType

Notation

Entity

DocumentFragment
Je InvalidOperationException vyvolán. Nedefinováno, i když čtenář obvykle zůstává na aktuální pozici.

Další informace naleznete v části XmlReader Poznámky na referenční stránce a schématu W3C XML část 2: Doporučení datových typů .

Asynchronní verzi této metody naleznete v tématu ReadContentAsAsync.

Platí pro