XmlReader.ReadContentAs(Type, IXmlNamespaceResolver) Metoda

Definicja

Odczytuje zawartość jako obiekt określonego 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 wartości, która ma zostać zwrócona.

Uwaga Po wydaniu .NET Framework 3.5 wartość parametru returnType może być teraz typemDateTimeOffset.

namespaceResolver
IXmlNamespaceResolver

IXmlNamespaceResolver Obiekt używany do rozpoznawania wszelkich prefiksów przestrzeni nazw związanych z konwersją typu. Można to na przykład użyć podczas konwertowania XmlQualifiedName obiektu na ciąg xs:string.

Ta wartość może być następująca null: .

Zwraca

Object

Połączona zawartość tekstowa lub wartość atrybutu przekonwertowana na żądany typ.

Wyjątki

Zawartość nie jest w poprawnym formacie dla typu docelowego.

Próba rzutowania jest nieprawidłowa.

Wartość elementu returnType to null.

Bieżący węzeł nie jest obsługiwanym typem węzła. Szczegółowe informacje znajdują się w tabeli poniżej.

-lub-

Metoda XmlReader została wywołana przed zakończeniem poprzedniej operacji asynchronicznej. W tym przypadku InvalidOperationException jest zgłaszany komunikat "Operacja asynchroniczna jest już w toku".

Przeczytaj Decimal.MaxValue.

Przykłady

W poniższym przykładzie użyto ReadContentAs metody , aby zwrócić zawartość elementu kolorów do tablicy obiektów ciągów.

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

W przykładzie użyto dataFile_2.xml pliku jako danych wejściowych.

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

Uwagi

Ta metoda odczytuje zawartość tekstową na bieżącej pozycji czytnika i konwertuje ją na żądany typ zwracany. Tekst, biały odstęp, znaczne odstępy i sekcje CDATA są łączone. Komentarze i instrukcje przetwarzania są pomijane, a odwołania do jednostek są automatycznie rozwiązywane.

Ta metoda służy do odczytywania, konwertowania w razie potrzeby i zwracania elementów wartości niepodzielnych z bieżącej zawartości węzła. Jeśli typ danych wejściowych jest prawidłowym mapowaniem typu bieżącego węzła, zwracane jest wystąpienie typu docelowego zawierającego wartość bieżącego węzła. Zobacz sekcję Uwagi na stronie referencyjnej XmlReader , aby uzyskać listę mapowań domyślnych.

Jeśli na przykład masz następujący tekst XML:

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

Jeśli dane są wpisywane, a tablica ciągów jest dostarczana do ReadContentAs wywołania metody, wartości całkowite są konwertowane z ciągów zgodnie z listą prawidłowych mapowań typów CLR.

Jeśli dane są nietypowe, a tablica ciągów jest dostarczana do ReadContentAs wywołania metody, zawartość jest analizowana na oddzielne ciągi. Tablica zawierająca dwa ciągi jest zwracana z wartościami "123" i "456". Spacje nie są zachowywane z zawartości.

Ogólnie rzecz biorąc, podczas odczytywania nietypowych danych zawartość jest analizowana zgodnie z podanym typem. Jeśli na przykład do wywołania metody zostanie dostarczona ReadContentAs tablica całkowita, ciąg zostanie przeanalizowany w tablicy liczb całkowitych {123,456}.

W poniższym przykładzie tekst XML nie jest oddzielony spacjami

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

Jeśli zawartość jest nietypowa, a tablica ciągów jest dostarczana do ReadContentAs wywołania metody, tablica zawierająca jeden połączony ciąg jest zwracana z wartością "123456789".

W poniższej tabeli opisano sposób traktowania poszczególnych typów węzłów przez tę metodę.

XmlNodeType Wartość zwracana Zachowanie czytelnika
Text

CDATA

Whitespace

SignificantWhitespace

EntityReference

EndEntity
Połączona zawartość tekstu, CDATA, odstępu i znaczących węzłów odstępów przekonwertowanych na żądany typ. Przechodzi do następnego elementu początkowego lub tagu elementu końcowego. Odwołania do jednostek są automatycznie rozszerzane.
Attribute Tak samo jak wywołanie XmlConvert.ToXxx wartości atrybutu. Czytelnik pozostaje w bieżącej pozycji.
Comment

ProcessingInstruction
Ignoruje instrukcję przetwarzania (PI) lub komentarz i odczytuje połączoną zawartość tekst, która jest zgodna z danymi pi lub komentarzem. Przechodzi do następnego elementu początkowego lub tagu elementu końcowego. Odwołania do jednostek są automatycznie rozszerzane.
EndElement Pusty ciąg. Czytelnik pozostaje w bieżącej pozycji.
Element

XmlDeclaration

None

Document

DocumentType

Notation

Entity

DocumentFragment
Jest InvalidOperationException zgłaszany. Niezdefiniowane, chociaż zazwyczaj czytelnik pozostaje w bieżącej pozycji.

Aby uzyskać więcej informacji, zobacz sekcję Uwagi na stronie referencyjnej XmlReader i rekomendację W3C XML Schema Part 2: Datatypes (Schemat XML W3C— część 2: zalecenia dotyczące typów danych ).

Aby uzyskać asynchroniczną wersję tej metody, zobacz ReadContentAsAsync.

Dotyczy