Sdílet prostřednictvím


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 .NET Framework 3.5 teď může být hodnota returnType parametru typemDateTimeOffset.

namespaceResolver
IXmlNamespaceResolver

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

Tato hodnota může být null.

Návraty

Object

Zřetězený textový obsah nebo hodnota atributu převedená 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ý typ uzlu. Podrobnosti jsou v následující tabulce.

-nebo-

XmlReader Před dokončením předchozí asynchronní operace byla volána metoda. V tomto případě InvalidOperationException je vyvolán zpráva "Asynchronní operace již 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

V příkladu se dataFile_2.xml soubor používá 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 oddíly 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í typ platným mapováním pro typ aktuálního uzlu, vrátí se instance cílového typu obsahující hodnotu aktuálního uzlu. XmlReader Seznam výchozíchmapováních

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 zadaná 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 řetězcové pole se do volání metody zadává ReadContentAs , obsah se analyzuje do samostatných řetězců. Pole obsahující dva řetězce se vrátí 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 celé číslo, ř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 řetězcové pole je zadáno volání ReadContentAs metody, 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 Vrácená 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ůstává v aktuální pozici.
Comment

ProcessingInstruction
Přeskočí instrukce pro 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ůstává na aktuální pozici.
Element

XmlDeclaration

None

Document

DocumentType

Notation

Entity

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

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

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

Platí pro