XmlReader Klasa

Definicja

Reprezentuje czytnik, który zapewnia szybki, niebuforowany, tylko do przodu dostęp do danych XML.

public ref class XmlReader abstract : IDisposable
public ref class XmlReader abstract
public abstract class XmlReader : IDisposable
public abstract class XmlReader
type XmlReader = class
    interface IDisposable
type XmlReader = class
Public MustInherit Class XmlReader
Implements IDisposable
Public MustInherit Class XmlReader
Dziedziczenie
XmlReader
Pochodne
Implementuje

Przykłady

Poniższy przykładowy kod pokazuje, jak użyć interfejsu API asynchronicznego do analizowania kodu XML.

async Task TestReader(System.IO.Stream stream)
{
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.Async = true;

    using (XmlReader reader = XmlReader.Create(stream, settings))
    {
        while (await reader.ReadAsync())
        {
            switch (reader.NodeType)
            {
                case XmlNodeType.Element:
                    Console.WriteLine("Start Element {0}", reader.Name);
                    break;
                case XmlNodeType.Text:
                    Console.WriteLine("Text Node: {0}",
                             await reader.GetValueAsync());
                    break;
                case XmlNodeType.EndElement:
                    Console.WriteLine("End Element {0}", reader.Name);
                    break;
                default:
                    Console.WriteLine("Other node {0} with value {1}",
                                    reader.NodeType, reader.Value);
                    break;
            }
        }
    }
}
Public Async Function TestReader(stream As System.IO.Stream) As Task
    Dim settings As New XmlReaderSettings()
    settings.Async = True

    Using reader As XmlReader = XmlReader.Create(stream, settings)
        While (Await reader.ReadAsync())
            Select Case (reader.NodeType)
                Case XmlNodeType.Element
                    Console.WriteLine("Start Element {0}", reader.Name)
                Case XmlNodeType.Text
                    Console.WriteLine("Text Node: {0}",
                             Await reader.GetValueAsync())
                Case XmlNodeType.EndElement
                    Console.WriteLine("End Element {0}", reader.Name)
                Case Else
                    Console.WriteLine("Other node {0} with value {1}",
                                    reader.NodeType, reader.Value)
            End Select
        End While
    End Using
End Function

Uwagi

XmlReader zapewnia dostęp tylko do odczytu do danych XML w dokumencie lub strumieniu. Ta klasa jest zgodna z zaleceniami dotyczącymi języka W3C Extensible Markup Language (XML) 1.0 (czwarta wersja) i przestrzeniami nazw w formacie XML 1.0 (trzecia wersja).

XmlReader metody umożliwiają przechodzenie przez dane XML i odczytywanie zawartości węzła. Właściwości klasy odzwierciedlają wartość bieżącego węzła, czyli miejsce, w którym znajduje się czytnik. Wartość ReadState właściwości wskazuje bieżący stan czytnika XML. Na przykład właściwość jest ustawiana ReadState.Initial przez metodę XmlReader.Read i ReadState.Closed przez metodę XmlReader.Close . XmlReader Zapewnia również kontrole zgodności danych i walidację względem dtD lub schematu.

XmlReader używa modelu ściągania do pobierania danych. Ten model:

  • Upraszcza zarządzanie stanem przez naturalne, odgórne uściślenie proceduralne.

  • Obsługuje wiele strumieni wejściowych i warstw.

  • Umożliwia klientowi nadanie analizatorowi buforu, w którym ciąg jest zapisywany bezpośrednio, a tym samym unika konieczności dodatkowej kopii ciągu.

  • Obsługuje przetwarzanie selektywne. Klient może pominąć elementy i przetworzyć te, które są interesujące dla aplikacji. Możesz również ustawić właściwości z wyprzedzeniem, aby zarządzać sposobem przetwarzania strumienia XML (na przykład normalizacją).

W tej sekcji:

Tworzenie czytnika XML Weryfikowanie danych XML Zgodność danych Nawigowanie po węzłach Odczytywanie elementów XML Odczytywanie atrybutów XML Odczytywanie zawartości XML Konwertowanie na typy CLR Programowanie asynchroniczne Zagadnienia dotyczące zabezpieczeń

Tworzenie czytnika XML

Create Użyj metody , aby utworzyć XmlReader wystąpienie.

Chociaż .NET Framework zapewnia konkretne implementacje XmlReader klasy, takie jak XmlTextReader, XmlNodeReaderi XmlValidatingReader klasy, zalecamy użycie wyspecjalizowanych klas tylko w następujących scenariuszach:

  • Jeśli chcesz odczytać poddrzewo DOM XML z XmlNode obiektu, użyj XmlNodeReader klasy . (Jednak ta klasa nie obsługuje weryfikacji dtD ani schematu).

  • Jeśli musisz rozwinąć jednostki na żądanie, nie chcesz znormalizować zawartości tekstowej XmlTextReader lub nie chcesz zwracać atrybutów domyślnych, użyj klasy .

Aby określić zestaw funkcji, które chcesz włączyć w czytniku XML, przekaż System.Xml.XmlReaderSettings obiekt do Create metody . Za pomocą pojedynczego System.Xml.XmlReaderSettings obiektu można utworzyć wielu czytelników z tą samą funkcjonalnością lub zmodyfikować System.Xml.XmlReaderSettings obiekt w celu utworzenia nowego czytnika z innym zestawem funkcji. Możesz również łatwo dodawać funkcje do istniejącego czytnika.

Jeśli nie używasz System.Xml.XmlReaderSettings obiektu, zostaną użyte ustawienia domyślne. Aby uzyskać szczegółowe informacje, zobacz stronę referencyjną Create .

XmlReader zgłasza błędy XmlException analizy XML. Po wystąpieniu wyjątku stan czytnika nie jest przewidywalny. Na przykład zgłoszony typ węzła może różnić się od rzeczywistego typu węzła bieżącego węzła. Użyj właściwości , ReadState aby sprawdzić, czy czytnik jest w stanie błędu.

Weryfikowanie danych XML

Aby zdefiniować strukturę dokumentu XML i jego relacji elementów, typów danych i ograniczeń zawartości, należy użyć schematu definicji typu dokumentu (DTD) lub języka definicji schematu XML (XSD). Dokument XML jest uznawany za dobrze sformułowany, jeśli spełnia wszystkie wymagania składniowe zdefiniowane przez zalecenie W3C XML 1.0. Jest on uznawany za prawidłowy, jeśli jest dobrze sformułowany, a także jest zgodny z ograniczeniami zdefiniowanymi przez jego dtD lub schemat. (Zobacz schemat XML W3C Część 1: Struktury i schemat XML W3C Część 2: Zalecenia dotyczące typów danych ). W związku z tym, chociaż wszystkie prawidłowe dokumenty XML są dobrze sformułowane, nie wszystkie dobrze sformułowane dokumenty XML są prawidłowe.

Dane można zweryfikować względem dtD, wbudowanego schematu XSD lub schematu XSD przechowywanego w XmlSchemaSet obiekcie (pamięci podręcznej); te scenariusze są opisane na stronie referencyjnej Create . XmlReader nie obsługuje weryfikacji schematu XML-Data Zmniejszona (XDR).

W klasie są używane następujące ustawienia XmlReaderSettings , aby określić typ weryfikacji, jeśli istnieje, XmlReader wystąpienie obsługuje.

Użyj tego XmlReaderSettings elementu członkowskiego Aby określić
DtdProcessing Właściwość Czy zezwolić na przetwarzanie DTD. Ustawieniem domyślnym jest niedozwolone przetwarzanie DTD.
ValidationType Właściwość Niezależnie od tego, czy czytelnik powinien zweryfikować dane, oraz jakiego typu weryfikacji należy wykonać (DTD lub schemat). Wartość domyślna to brak walidacji danych.
ValidationEventHandler Zdarzenie Procedura obsługi zdarzeń do odbierania informacji o zdarzeniach weryfikacji. Jeśli nie podano procedury obsługi zdarzeń, XmlException zostanie zgłoszony pierwszy błąd weryfikacji.
ValidationFlags Właściwość Dodatkowe opcje walidacji za pośrednictwem XmlSchemaValidationFlags elementów członkowskich wyliczenia:

- AllowXmlAttributes-- Zezwalaj na atrybuty XML (xml:*) w dokumentach wystąpień nawet wtedy, gdy nie są zdefiniowane w schemacie. Atrybuty są weryfikowane na podstawie ich typu danych. Zobacz stronę referencyjną XmlSchemaValidationFlags ustawienia do użycia w określonych scenariuszach. (Domyślnie wyłączone).
- ProcessIdentityConstraints --Przetwarzanie ograniczeń tożsamości (xs:ID, xs:IDREF, xs:key, xs:keyref, xs:unique) napotkanych podczas walidacji. (Domyślnie włączone).
- ProcessSchemaLocation --Process schemas określone przez xsi:schemaLocation atrybut or xsi:noNamespaceSchemaLocation . (Domyślnie włączone).
- ProcessInlineSchema-- Przetwarzanie wbudowanych schematów XML podczas walidacji. (Domyślnie wyłączone).
- ReportValidationWarnings--Zgłoś zdarzenia, jeśli wystąpi ostrzeżenie dotyczące walidacji. Ostrzeżenie jest zwykle wydawane, gdy nie ma dtD lub schematu XML w celu zweryfikowania określonego elementu lub atrybutu. Element ValidationEventHandler jest używany do powiadamiania. (Domyślnie wyłączone).
Schemas Element XmlSchemaSet do użycia do walidacji.
XmlResolver Właściwość Element XmlResolver do rozpoznawania i uzyskiwania dostępu do zasobów zewnętrznych. Może to obejmować jednostki zewnętrzne, takie jak DTD i schematy, oraz dowolne xs:include lub xs:import elementy zawarte w schemacie XML. Jeśli nie określisz elementu , XmlReader używa wartości domyślnej XmlResolverXmlUrlResolver bez poświadczeń użytkownika.

Zgodność danych

Czytniki XML, które są tworzone przez metodę Create , domyślnie spełniają następujące wymagania dotyczące zgodności:

  • Nowe wiersze i wartość atrybutu są znormalizowane zgodnie z zaleceniem W3C XML 1.0.

  • Wszystkie jednostki są automatycznie rozszerzane.

  • Atrybuty domyślne zadeklarowane w definicji typu dokumentu są zawsze dodawane nawet wtedy, gdy czytnik nie weryfikuje.

  • Deklaracja prefiksu XML mapowanego na prawidłowy identyfikator URI przestrzeni nazw XML jest dozwolony.

  • Nazwy notacji w pojedynczej NotationType deklaracji atrybutu i NmTokens w pojedynczej Enumeration deklaracji atrybutu są odrębne.

Użyj tych XmlReaderSettings właściwości, aby określić typ kontroli zgodności, które chcesz włączyć:

Użyj tej XmlReaderSettings właściwości Działanie Domyślny
CheckCharacters Właściwość Włącz lub wyłącz kontrole dla następujących elementów:

- Znaki znajdują się w zakresie znaków PRAWNYCH XML, zgodnie z definicją w sekcji 2.2 Znaki zalecenia W3C XML 1.0.
— Wszystkie nazwy XML są prawidłowe, zgodnie z definicją w sekcji Common Syntactic Constructs (Typowe konstrukcje syntatyczne ) zalecenia W3C XML 1.0.

Gdy ta właściwość jest ustawiona na true (wartość domyślna), XmlException zgłaszany jest wyjątek, jeśli plik XML zawiera niedozwolone znaki lub nieprawidłowe nazwy XML (na przykład nazwa elementu zaczyna się od liczby).
Sprawdzanie znaków i nazw jest włączone.

Ustawienie powoduje CheckCharacters false wyłączenie sprawdzania znaków dla odwołań do jednostki znaków. Jeśli czytelnik przetwarza dane tekstowe, zawsze sprawdza, czy nazwy XML są prawidłowe, niezależnie od tego ustawienia. Uwaga: Zalecenie XML 1.0 wymaga zgodności na poziomie dokumentu, gdy jest obecny dtD. W związku z tym, jeśli czytnik jest skonfigurowany do obsługi ConformanceLevel.Fragment, ale dane XML zawierają definicję typu dokumentu (DTD), XmlException jest zgłaszany.
ConformanceLevel Właściwość Wybierz poziom zgodności, aby wymusić:

- Document. Jest zgodny z regułami dobrze sformułowanego dokumentu XML 1.0.
- Fragment. Jest zgodny z regułami dobrze sformułowanego fragmentu dokumentu, który może być używany jako zewnętrzna jednostka analizowana.
- Auto. Jest zgodny z poziomem określonym przez czytelnika.

Jeśli dane nie są zgodne, XmlException zgłaszany jest wyjątek.
Document

Bieżący węzeł to węzeł XML, na którym obecnie znajduje się czytnik XML. Wszystkie XmlReader metody wykonują operacje w odniesieniu do tego węzła, a wszystkie XmlReader właściwości odzwierciedlają wartość bieżącego węzła.

Poniższe metody ułatwiają nawigowanie po węzłach i analizowanie danych.

Użyj tej XmlReaderSettings metody Działanie
Read Odczytywanie pierwszego węzła i przechodzenie przez strumień po jednym węźle jednocześnie. Takie wywołania są zwykle wykonywane wewnątrz while pętli.

NodeType Użyj właściwości , aby uzyskać typ (na przykład atrybut, komentarz, element itd.) bieżącego węzła.
Skip Pomiń elementy podrzędne bieżącego węzła i przejdź do następnego węzła.
MoveToContent i MoveToContentAsync Pomiń węzły inne niż zawartość i przejdź do następnego węzła zawartości lub na końcu pliku.

Węzły niezwiązane z zawartością obejmują ProcessingInstruction, DocumentType, Comment, Whitespacei SignificantWhitespace.

Węzły zawartości zawierają tekst inny niż biały, CDATA, EntityReference i EndEntity.
ReadSubtree Odczytaj element i wszystkie jego elementy podrzędne i zwróć nowe XmlReader wystąpienie ustawione na ReadState.Initialwartość .

Ta metoda jest przydatna do tworzenia granic wokół elementów XML; jeśli na przykład chcesz przekazać dane do innego składnika do przetwarzania i chcesz ograniczyć ilość danych, do których składnik może uzyskać dostęp.

XmlReader.Read Zobacz stronę referencyjną, aby zapoznać się z przykładem nawigowania po strumieniu tekstowym po jednym węźle i wyświetlania typu każdego węzła.

W poniższych sekcjach opisano sposób odczytywania określonych typów danych, takich jak elementy, atrybuty i typizowane dane.

Odczytywanie elementów XML

W poniższej tabeli wymieniono metody i właściwości zapewniane przez klasę XmlReader do przetwarzania elementów. Po ustawieniu elementu XmlReader właściwości węzła, takie jak Name, odzwierciedlają wartości elementów. Oprócz elementów członkowskich opisanych poniżej można również używać dowolnych ogólnych metod i właściwości XmlReader klasy do przetwarzania elementów. Na przykład można użyć ReadInnerXml metody , aby odczytać zawartość elementu.

Uwaga

Zobacz sekcję 3.1 zalecenia W3C XML 1.0, aby zapoznać się z definicjami tagów początkowych, tagów końcowych i pustych tagów elementów.

Użyj tego XmlReader elementu członkowskiego Działanie
Metoda IsStartElement Sprawdź, czy bieżący węzeł jest tagiem początkowym, czy pustym tagiem elementu.
Metoda ReadStartElement Sprawdź, czy bieżący węzeł jest elementem i przejdź do następnego węzła (wywołania IsStartElement Read, a następnie ).
Metoda ReadEndElement Sprawdź, czy bieżący węzeł jest tagiem końcowym i przejdź do następnego węzła.
Metoda ReadElementString Odczytywanie elementu tylko do tekstu.
Metoda ReadToDescendant Przejdź do następnego elementu podrzędnego (podrzędnego) czytnika XML, który ma określoną nazwę.
Metoda ReadToNextSibling Przejdź do następnego elementu równorzędnego czytnika XML, który ma określoną nazwę.
IsEmptyElement Właściwość Sprawdź, czy bieżący element ma tag elementu końcowego. Na przykład:

- <item num="123"/> (IsEmptyElement to true.)
- <item num="123"> </item> (IsEmptyElement to false, chociaż zawartość elementu jest pusta).

Aby zapoznać się z przykładem odczytywania zawartości tekstowej elementów, zobacz metodę ReadString . Poniższy przykład przetwarza elementy przy użyciu while pętli.

while (reader.Read()) {
  if (reader.IsStartElement()) {
    if (reader.IsEmptyElement)
                {
                    Console.WriteLine("<{0}/>", reader.Name);
                }
                else {
      Console.Write("<{0}> ", reader.Name);
      reader.Read(); // Read the start tag.
      if (reader.IsStartElement())  // Handle nested elements.
        Console.Write("\r\n<{0}>", reader.Name);
      Console.WriteLine(reader.ReadString());  //Read the text content of the element.
    }
  }
}
While reader.Read()
  If reader.IsStartElement() Then
    If reader.IsEmptyElement Then
      Console.WriteLine("<{0}/>", reader.Name)
    Else
      Console.Write("<{0}> ", reader.Name)
      reader.Read() ' Read the start tag.
      If reader.IsStartElement() Then ' Handle nested elements.
        Console.Write(vbCr + vbLf + "<{0}>", reader.Name)
      End If
      Console.WriteLine(reader.ReadString()) 'Read the text content of the element.
    End If
  End If
End While

Odczytywanie atrybutów XML

Atrybuty XML są najczęściej spotykane w elementach, ale są również dozwolone w węzłach deklaracji XML i typu dokumentu.

Po ustawieniu elementu w węźle MoveToAttribute elementu metoda umożliwia przejście przez listę atrybutów elementu. Należy pamiętać, że po MoveToAttribute wywołaniu właściwości węzła, takie jak Name, NamespaceURIi Prefix odzwierciedlają właściwości tego atrybutu, a nie właściwości elementu, do którego należy atrybut.

Klasa XmlReader udostępnia te metody i właściwości do odczytywania i przetwarzania atrybutów elementów.

Użyj tego XmlReader elementu członkowskiego Działanie
HasAttributes Właściwość Sprawdź, czy bieżący węzeł ma jakiekolwiek atrybuty.
AttributeCount Właściwość Pobierz liczbę atrybutów dla bieżącego elementu.
Metoda MoveToFirstAttribute Przejdź do pierwszego atrybutu w elemecie .
Metoda MoveToNextAttribute Przejdź do następnego atrybutu w elemecie .
Metoda MoveToAttribute Przejdź do określonego atrybutu.
GetAttribute metoda lub Item[] właściwość Pobierz wartość określonego atrybutu.
IsDefault Właściwość Sprawdź, czy bieżący węzeł jest atrybutem wygenerowanym na podstawie wartości domyślnej zdefiniowanej w dtD lub schemacie.
Metoda MoveToElement Przejdź do elementu, który jest właścicielem bieżącego atrybutu. Użyj tej metody, aby powrócić do elementu po przejściu przez jego atrybuty.
Metoda ReadAttributeValue Przeanalizuj wartość atrybutu w co najmniej jednym Textwęźle , EntityReferencelub EndEntity .

Do przetwarzania atrybutów można również użyć dowolnych ogólnych XmlReader metod i właściwości. Na przykład po ustawieniu atrybutu XmlReader właściwości Name i Value odzwierciedlają wartości atrybutu . Można również użyć dowolnej metody zawartości Read , aby uzyskać wartość atrybutu.

W tym przykładzie użyto AttributeCount właściwości do nawigowania po wszystkich atrybutach elementu.

// Display all attributes.
if (reader.HasAttributes) {
  Console.WriteLine("Attributes of <" + reader.Name + ">");
  for (int i = 0; i < reader.AttributeCount; i++) {
    Console.WriteLine("  {0}", reader[i]);
  }
  // Move the reader back to the element node.
  reader.MoveToElement();
}
' Display all attributes.
If reader.HasAttributes Then
  Console.WriteLine("Attributes of <" + reader.Name + ">")
  Dim i As Integer
  For i = 0 To (reader.AttributeCount - 1)
    Console.WriteLine("  {0}", reader(i))
  Next i
  ' Move the reader back to the element node.
  reader.MoveToElement() 
End If

W tym przykładzie użyto MoveToNextAttribute metody w while pętli do nawigowania po atrybutach.

if (reader.HasAttributes) {
  Console.WriteLine("Attributes of <" + reader.Name + ">");
  while (reader.MoveToNextAttribute()) {
    Console.WriteLine(" {0}={1}", reader.Name, reader.Value);
  }
  // Move the reader back to the element node.
  reader.MoveToElement();
}
If reader.HasAttributes Then
  Console.WriteLine("Attributes of <" + reader.Name + ">")
  While reader.MoveToNextAttribute()
    Console.WriteLine(" {0}={1}", reader.Name, reader.Value)
  End While
  ' Move the reader back to the element node.
  reader.MoveToElement()
End If

Odczytywanie atrybutów w węzłach deklaracji XML

Gdy czytnik XML jest umieszczony w węźle deklaracji XML, Value właściwość zwraca informacje o wersji, autonomicznej i kodowaniu jako pojedynczy ciąg. XmlReader obiekty utworzone przez metodę Create , klasę XmlTextReader i XmlValidatingReader klasę uwidaczniają wersję, autonomiczną i elementy kodowania jako atrybuty.

Odczytywanie atrybutów w węzłach typu dokumentu

Gdy czytnik XML jest umieszczony w węźle typu dokumentu, GetAttribute metoda i Item[] właściwość mogą służyć do zwracania wartości literałów SYSTEM i PUBLIC. Na przykład wywołanie reader.GetAttribute("PUBLIC") zwraca wartość PUBLIC.

Odczytywanie atrybutów dotyczących przetwarzania węzłów instrukcji

Gdy obiekt XmlReader znajduje się w węźle instrukcji przetwarzania, Value właściwość zwraca całą zawartość tekstową. Elementy w węźle instrukcji przetwarzania nie są traktowane jako atrybuty. Nie można ich odczytać za pomocą GetAttribute metody lub MoveToAttribute .

Odczytywanie zawartości XML

Klasa XmlReader zawiera następujące elementy członkowskie, które odczytują zawartość z pliku XML i zwracają zawartość jako wartości ciągu. (Aby zwrócić typy CLR, zobacz następną sekcję).

Użyj tego XmlReader elementu członkowskiego Działanie
Value Właściwość Pobierz zawartość tekstowa bieżącego węzła. Zwrócona wartość zależy od typu węzła; aby uzyskać szczegółowe informacje, zobacz stronę referencyjną Value .
Metoda ReadString Pobierz zawartość elementu lub węzła tekstowego jako ciąg. Ta metoda zatrzymuje się na przetwarzaniu instrukcji i komentarzy.

Aby uzyskać szczegółowe informacje na temat sposobu obsługi określonych typów węzłów przez tę metodę, zobacz stronę referencyjną ReadString .
ReadInnerXmlmetody i ReadInnerXmlAsync Pobierz całą zawartość bieżącego węzła, w tym znaczniki, ale z wyłączeniem tagów początkowych i końcowych. Na przykład dla:

<node>this<child id="123"/></node>

ReadInnerXml Zwraca:

this<child id="123"/>
ReadOuterXmlmetody i ReadOuterXmlAsync Pobierz całą zawartość bieżącego węzła i jego elementów podrzędnych, w tym znaczniki i tagi początkowe/końcowe. Na przykład dla:

<node>this<child id="123"/></node>

ReadOuterXml Zwraca:

<node>this<child id="123"/></node>

Konwertowanie na typy CLR

Elementy członkowskie XmlReader klasy (wymienione w poniższej tabeli) umożliwiają odczytywanie danych XML i zwracanie wartości jako typów środowiska uruchomieniowego języka wspólnego (CLR) zamiast ciągów. Te elementy członkowskie umożliwiają uzyskanie wartości w reprezentacji, która jest najbardziej odpowiednia dla zadania kodowania bez konieczności ręcznego analizowania lub konwertowania wartości ciągu.

  • Metody ReadElementContentAs można wywoływać tylko w typach węzłów elementów. Tych metod nie można używać w elementach zawierających elementy podrzędne lub zawartość mieszaną. Po wywołaniu XmlReader obiekt odczytuje tag startowy, odczytuje zawartość elementu, a następnie przechodzi obok tagu elementu końcowego. Instrukcje przetwarzania i komentarze są ignorowane, a jednostki są rozwijane.

  • Metody ReadContentAs odczytują zawartość tekstu w bieżącej pozycji czytnika, a jeśli dane XML nie mają skojarzonych z nim żadnych informacji o schemacie lub typie danych, przekonwertuj zawartość tekst na żądany typ zwracany. Tekst, białe znaki, istotne białe znaki i sekcje CDATA są łączone. Komentarze i instrukcje przetwarzania są pomijane, a odwołania do jednostek są automatycznie rozwiązywane.

Klasa XmlReader używa reguł zdefiniowanych przez zalecenie schematu XML W3C Part 2: Datatypes .

Użyj tej XmlReader metody Aby zwrócić ten typ CLR
ReadContentAsBoolean i ReadElementContentAsBoolean Boolean
ReadContentAsDateTime i ReadElementContentAsDateTime DateTime
ReadContentAsDouble i ReadElementContentAsDouble Double
ReadContentAsLong i ReadElementContentAsLong Int64
ReadContentAsInt i ReadElementContentAsInt Int32
ReadContentAsString i ReadElementContentAsString String
ReadContentAs i ReadElementContentAs Typ określony za pomocą parametru returnType
ReadContentAsObject i ReadElementContentAsObject Najbardziej odpowiedni typ określony przez XmlReader.ValueType właściwość . Aby uzyskać informacje o mapowaniu, zobacz Obsługa typów w klasach System.Xml .

Jeśli nie można łatwo przekonwertować elementu na typ CLR ze względu na jego format, możesz użyć mapowania schematu, aby zapewnić pomyślną konwersję. W poniższym przykładzie użyto pliku xsd do przekonwertowania hire-date elementu na xs:date typ, a następnie użyto ReadElementContentAsDateTime metody , aby zwrócić element jako DateTime obiekt.

Dane wejściowe (hireDate.xml):

<employee xmlns="urn:empl-hire">
    <ID>12365</ID>
    <hire-date>2003-01-08</hire-date>
    <title>Accountant</title>
</employee>

Schemat (hireDate.xsd):

<?xml version="1.0"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="urn:empl-hire" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="employee">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ID" type="xs:unsignedShort" />
        <xs:element name="hire-date" type="xs:date" />
        <xs:element name="title" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Kod:

// Create a validating XmlReader object. The schema
// provides the necessary type information.
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.Schemas.Add("urn:empl-hire", "hireDate.xsd");
using (XmlReader reader = XmlReader.Create("hireDate.xml", settings)) {

  // Move to the hire-date element.
  reader.MoveToContent();
  reader.ReadToDescendant("hire-date");

  // Return the hire-date as a DateTime object.
  DateTime hireDate = reader.ReadElementContentAsDateTime();
  Console.WriteLine("Six Month Review Date: {0}", hireDate.AddMonths(6));
}
' Create a validating XmlReader object. The schema 
' provides the necessary type information.
Dim settings As XmlReaderSettings = New XmlReaderSettings()
settings.ValidationType = ValidationType.Schema
settings.Schemas.Add("urn:empl-hire", "hireDate.xsd")
Using reader As XmlReader = XmlReader.Create("hireDate.xml", settings) 
  ' Move to the hire-date element.
  reader.MoveToContent()
  reader.ReadToDescendant("hire-date")

  ' Return the hire-date as a DateTime object.
  Dim hireDate As DateTime = reader.ReadElementContentAsDateTime()
  Console.WriteLine("Six Month Review Date: {0}", hireDate.AddMonths(6))
End Using

Wyjście:

Six Month Review Date:  7/8/2003 12:00:00 AM

Programowanie asynchroniczne

XmlReader Większość metod ma asynchroniczne odpowiedniki, które mają "asynchroniczne" na końcu nazw metod. Na przykład asynchroniczny odpowiednik elementu ReadContentAsObject to ReadContentAsObjectAsync.

Następujące metody mogą być używane z wywołaniami metody asynchronicznej:

W poniższych sekcjach opisano asynchroniczne użycie metod, które nie mają odpowiedników asynchronicznych.

ReadStartElement, metoda

public static async Task ReadStartElementAsync(this XmlReader reader, string localname, string ns)
{
    if (await reader.MoveToContentAsync() != XmlNodeType.Element)
    {
        throw new InvalidOperationException(reader.NodeType.ToString() + " is an invalid XmlNodeType");
    }
    if ((reader.LocalName == localname) && (reader.NamespaceURI == ns))
    {
        await reader.ReadAsync();
    }
    else
    {
        throw new InvalidOperationException("localName or namespace doesn’t match");
    }
}
<Extension()>
Public Async Function ReadStartElementAsync(reader As XmlReader, localname As String, ns As String) As Task
    If (Await reader.MoveToContentAsync() <> XmlNodeType.Element) Then
        Throw New InvalidOperationException(reader.NodeType.ToString() + " is an invalid XmlNodeType")
    End If

    If ((reader.LocalName = localname) And (reader.NamespaceURI = ns)) Then
        Await reader.ReadAsync()
    Else
        Throw New InvalidOperationException("localName or namespace doesn’t match")
    End If
End Function

ReadEndElement, metoda

public static async Task ReadEndElementAsync(this XmlReader reader)
{
    if (await reader.MoveToContentAsync() != XmlNodeType.EndElement)
    {
        throw new InvalidOperationException();
    }
    await reader.ReadAsync();
}
<Extension()>
Public Async Function ReadEndElementAsync(reader As XmlReader) As task
    If (Await reader.MoveToContentAsync() <> XmlNodeType.EndElement) Then
        Throw New InvalidOperationException()
    End If
    Await reader.ReadAsync()
End Function

ReadToNextSibling, metoda

public static async Task<bool> ReadToNextSiblingAsync(this XmlReader reader, string localName, string namespaceURI)
{
    if (localName == null || localName.Length == 0)
    {
        throw new ArgumentException("localName is empty or null");
    }
    if (namespaceURI == null)
    {
        throw new ArgumentNullException("namespaceURI");
    }

    // atomize local name and namespace
    localName = reader.NameTable.Add(localName);
    namespaceURI = reader.NameTable.Add(namespaceURI);

    // find the next sibling
    XmlNodeType nt;
    do
    {
        await reader.SkipAsync();
        if (reader.ReadState != ReadState.Interactive)
            break;
        nt = reader.NodeType;
        if (nt == XmlNodeType.Element &&
             ((object)localName == (object)reader.LocalName) &&
             ((object)namespaceURI ==(object)reader.NamespaceURI))
        {
            return true;
        }
    } while (nt != XmlNodeType.EndElement && !reader.EOF);
    
    return false;
}
<Extension()>
Public Async Function ReadToNextSiblingAsync(reader As XmlReader, localName As String, namespaceURI As String) As Task(Of Boolean)
    If (localName = Nothing Or localName.Length = 0) Then
        Throw New ArgumentException("localName is empty or null")
    End If

    If (namespaceURI = Nothing) Then
        Throw New ArgumentNullException("namespaceURI")
    End If

    ' atomize local name and namespace
    localName = reader.NameTable.Add(localName)
    namespaceURI = reader.NameTable.Add(namespaceURI)

    ' find the next sibling
    Dim nt As XmlNodeType
    Do

        Await reader.SkipAsync()
        If (reader.ReadState <> ReadState.Interactive) Then
            Exit Do
        End If
        nt = reader.NodeType
        If ((nt = XmlNodeType.Element) And
           ((CObj(localName) = CObj(reader.LocalName))) And
           (CObj(namespaceURI) = CObj(reader.NamespaceURI))) Then
            Return True
        End If
    Loop While (nt <> XmlNodeType.EndElement And (Not reader.EOF))

    Return False

End Function

ReadToFollowing, metoda

public static async Task<bool> ReadToFollowingAsync(this XmlReader reader, string localName, string namespaceURI)
{
    if (localName == null || localName.Length == 0)
    {
        throw new ArgumentException("localName is empty or null");
    }
    if (namespaceURI == null)
    {
        throw new ArgumentNullException("namespaceURI");
    }

    // atomize local name and namespace
    localName = reader.NameTable.Add(localName);
    namespaceURI = reader.NameTable.Add(namespaceURI);

    // find element with that name
    while (await reader.ReadAsync())
    {
        if (reader.NodeType == XmlNodeType.Element && ((object)localName == (object)reader.LocalName) && ((object)namespaceURI == (object)reader.NamespaceURI))
        {
            return true;
        }
    }
    return false;
}
<Extension()>
Public Async Function ReadToFollowingAsync(reader As XmlReader, localName As String, namespaceURI As String) As Task(Of Boolean)
    If (localName = Nothing Or localName.Length = 0) Then
        Throw New ArgumentException("localName is empty or null")
    End If

    If (namespaceURI = Nothing) Then
        Throw New ArgumentNullException("namespaceURI")
    End If

    ' atomize local name and namespace
    localName = reader.NameTable.Add(localName)
    namespaceURI = reader.NameTable.Add(namespaceURI)

    ' find element with that name
    While (Await reader.ReadAsync())
        If ((reader.NodeType = XmlNodeType.Element) And
           (CObj(localName) = CObj(reader.LocalName)) And
           (CObj(namespaceURI) = CObj(reader.NamespaceURI))) Then
            Return True
        End If
    End While

    Return False
End Function

ReadToDescendant, metoda

public static async Task<bool> ReadToDescendantAsync(this XmlReader reader, string localName, string namespaceURI)
{
    if (localName == null || localName.Length == 0)
    {
        throw new ArgumentException("localName is empty or null");
    }
    if (namespaceURI == null)
    {
        throw new ArgumentNullException("namespaceURI");
    }
    // save the element or root depth
    int parentDepth = reader.Depth;
    if (reader.NodeType != XmlNodeType.Element)
    {
        // adjust the depth if we are on root node
        if (reader.ReadState == ReadState.Initial)
        {
            parentDepth--;
        }
        else
        {
            return false;
        }
    }
    else if (reader.IsEmptyElement)
    {
        return false;
    }

    // atomize local name and namespace
    localName = reader.NameTable.Add(localName);
    namespaceURI = reader.NameTable.Add(namespaceURI);

    // find the descendant
    while (await reader.ReadAsync() && reader.Depth > parentDepth)
    {
        if (reader.NodeType == XmlNodeType.Element && ((object)localName == (object)reader.LocalName) && ((object)namespaceURI == (object)reader.NamespaceURI))
        {
            return true;
        }
    }
    return false;
}
<Extension()>
Public Async Function ReadToDescendantAsync(reader As XmlReader, localName As String, namespaceURI As String) As Task(Of Boolean)
    If (localName = Nothing Or localName.Length = 0) Then
        Throw New ArgumentException("localName is empty or null")
    End If

    If (namespaceURI = Nothing) Then
        Throw New ArgumentNullException("namespaceURI")
    End If

    ' save the element or root depth
    Dim parentDepth As Integer = reader.Depth
    If (reader.NodeType <> XmlNodeType.Element) Then
        ' adjust the depth if we are on root node
        If (reader.ReadState = ReadState.Initial) Then
            parentDepth -= 1
        Else
            Return False
        End If
    ElseIf (reader.IsEmptyElement) Then
        Return False
    End If
    ' atomize local name and namespace
    localName = reader.NameTable.Add(localName)
    namespaceURI = reader.NameTable.Add(namespaceURI)

    ' find the descendant
    While (Await reader.ReadAsync() And reader.Depth > parentDepth)
        If (reader.NodeType = XmlNodeType.Element And
           (CObj(localName) = CObj(reader.LocalName)) And
           (CObj(namespaceURI) = CObj(reader.NamespaceURI))) Then
            Return True
        End If
    End While

    Return False
End Function

Zagadnienia dotyczące bezpieczeństwa

Podczas pracy z klasą XmlReader należy wziąć pod uwagę następujące kwestie:

  • Wyjątki zgłaszane przez usługę XmlReader mogą ujawniać informacje o ścieżce, których nie chcesz, aby były przekazywane do aplikacji. Aplikacja musi przechwytywać wyjątki i odpowiednio je przetwarzać.

  • Nie włączaj przetwarzania DTD, jeśli martwisz się o odmowę usługi lub jeśli masz do czynienia z niezaufanymi źródłami. Przetwarzanie DTD jest domyślnie wyłączone dla XmlReader obiektów utworzonych przez metodę Create .

    Jeśli masz włączone przetwarzanie DTD, możesz użyć polecenia XmlSecureResolver , aby ograniczyć zasoby, do których XmlReader ma dostęp. Możesz również zaprojektować aplikację, aby przetwarzanie XML było ograniczone pamięci i czasu. Na przykład limity czasu można skonfigurować w aplikacji ASP.NET.

  • Dane XML mogą zawierać odwołania do zasobów zewnętrznych, takich jak plik schematu. Domyślnie zasoby zewnętrzne są rozwiązywane przy użyciu XmlUrlResolver obiektu bez poświadczeń użytkownika. Możesz to dodatkowo zabezpieczyć, wykonując jedną z następujących czynności:

  • Flagi ProcessInlineSchema i ProcessSchemaLocation walidacji XmlReaderSettings obiektu nie są ustawiane domyślnie. Pomaga to chronić XmlReader przed atakami opartymi na schemacie podczas przetwarzania danych XML z niezaufanego źródła. Gdy te flagi są ustawione, XmlResolver XmlReaderSettings obiekt jest używany do rozpoznawania lokalizacji schematu napotkanych w dokumencie wystąpienia w pliku XmlReader. XmlResolver Jeśli właściwość jest ustawiona na null, lokalizacje schematu nie są rozpoznawane, nawet jeśli ProcessInlineSchema flagi i ProcessSchemaLocation walidacji są ustawione.

    Schematy dodane podczas walidacji dodają nowe typy i mogą zmienić wynik weryfikacji dokumentu, który jest weryfikowany. W związku z tym schematy zewnętrzne powinny być rozpoznawane tylko z zaufanych źródeł.

    Zalecamy wyłączenie flagi ProcessIdentityConstraints podczas sprawdzania poprawności niezaufanych, dużych dokumentów XML w scenariuszach wysokiej dostępności względem schematu, który ma ograniczenia tożsamości w dużej części dokumentu. Ta flaga jest domyślnie włączona.

  • Dane XML mogą zawierać dużą liczbę atrybutów, deklaracji przestrzeni nazw, zagnieżdżonych elementów itd., które wymagają znacznego czasu na przetworzenie. Aby ograniczyć rozmiar danych wejściowych wysyłanych do elementu XmlReader, możesz:

  • Metoda ReadValueChunk może służyć do obsługi dużych strumieni danych. Ta metoda odczytuje niewielką liczbę znaków jednocześnie zamiast przydzielania pojedynczego ciągu dla całej wartości.

  • Podczas odczytywania dokumentu XML z dużą liczbą unikatowych nazw lokalnych, przestrzeni nazw lub prefiksów może wystąpić problem. Jeśli używasz klasy pochodzącej z XmlReaderklasy i wywołujesz LocalNamewłaściwość , Prefixlub NamespaceURI dla każdego elementu, zwracany ciąg zostanie dodany do klasy NameTable. Kolekcja przechowywana przez element nigdy nie zmniejsza rozmiaru NameTable , tworząc wirtualny wyciek pamięci uchwytów ciągów. Jednym z środków zaradczych jest wyprowadzenie z NameTable klasy i wymuszenie maksymalnego limitu przydziału rozmiaru. (Nie ma możliwości zapobiegania używaniu NameTableobiektu lub przełączania NameTable , gdy jest pełny). Innym ograniczeniem ryzyka jest unikanie używania wymienionych właściwości i zamiast tego należy użyć MoveToAttribute metody z IsStartElement metodą tam, gdzie jest to możliwe. Te metody nie zwracają ciągów, a tym samym uniknąć problemu nadmiernego wypełniania NameTable kolekcji.

  • XmlReaderSettings obiekty mogą zawierać poufne informacje, takie jak poświadczenia użytkownika. Niezaufany składnik może używać XmlReaderSettings obiektu i jego poświadczeń użytkownika do tworzenia XmlReader obiektów do odczytywania danych. Podczas buforowania XmlReaderSettings obiektów lub przekazywania XmlReaderSettings obiektu z jednego składnika do innego należy zachować ostrożność.

  • Nie akceptuj składników pomocniczych, takich jak NameTable, XmlNamespaceManageri XmlResolver , z niezaufanego źródła.

Konstruktory

XmlReader()

Inicjuje nowe wystąpienie klasy XmlReader.

Właściwości

AttributeCount

Po zastąpieniu w klasie pochodnej pobiera liczbę atrybutów w bieżącym węźle.

BaseURI

Po zastąpieniu w klasie pochodnej pobiera podstawowy identyfikator URI bieżącego węzła.

CanReadBinaryContent

Pobiera wartość wskazującą, czy XmlReader implementuje metody odczytu zawartości binarnej.

CanReadValueChunk

Pobiera wartość wskazującą, czy XmlReader implementuje metodę ReadValueChunk(Char[], Int32, Int32) .

CanResolveEntity

Pobiera wartość wskazującą, czy ten czytelnik może analizować i rozpoznawać jednostki.

Depth

Po zastąpieniu klasy pochodnej pobiera głębokość bieżącego węzła w dokumencie XML.

EOF

Po zastąpieniu w klasie pochodnej pobiera wartość wskazującą, czy czytnik jest umieszczony na końcu strumienia.

HasAttributes

Pobiera wartość wskazującą, czy bieżący węzeł ma jakiekolwiek atrybuty.

HasValue

Po zastąpieniu w klasie pochodnej pobiera wartość wskazującą, czy bieżący węzeł może mieć Valuewartość .

IsDefault

W przypadku zastąpienia w klasie pochodnej pobiera wartość wskazującą, czy bieżący węzeł jest atrybutem wygenerowanym z wartości domyślnej zdefiniowanej w dtD lub schemacie.

IsEmptyElement

Po zastąpieniu w klasie pochodnej pobiera wartość wskazującą, czy bieżący węzeł jest pustym elementem (na przykład <MyElement/>).

Item[Int32]

Po zastąpieniu w klasie pochodnej pobiera wartość atrybutu z określonym indeksem.

Item[String, String]

Po zastąpieniu w klasie pochodnej pobiera wartość atrybutu o określonej wartości LocalName i NamespaceURI.

Item[String]

Po zastąpieniu w klasie pochodnej pobiera wartość atrybutu o określonej wartości Name.

LocalName

Po zastąpieniu w klasie pochodnej pobiera lokalną nazwę bieżącego węzła.

Name

Po zastąpieniu w klasie pochodnej pobiera kwalifikowaną nazwę bieżącego węzła.

NamespaceURI

Po zastąpieniu w klasie pochodnej pobiera identyfikator URI przestrzeni nazw (zgodnie ze specyfikacją przestrzeni nazw W3C) węzła, na którym znajduje się czytnik.

NameTable

Po przesłonięciu w klasie pochodnej zostanie XmlNameTable skojarzona z tą implementacją.

NodeType

Gdy zastąpisz klasę pochodną, pobiera typ bieżącego węzła.

Prefix

Po zastąpieniu w klasie pochodnej pobiera prefiks przestrzeni nazw skojarzony z bieżącym węzłem.

QuoteChar

Po zastąpieniu w klasie pochodnej pobiera znak cudzysłowu używany do ujęć wartość węzła atrybutu.

ReadState

Po przesłonięciu w klasie pochodnej pobiera stan czytnika.

SchemaInfo

Pobiera informacje o schemacie, które zostały przypisane do bieżącego węzła w wyniku weryfikacji schematu.

Settings

Pobiera obiekt użyty do utworzenia XmlReaderSettings tego XmlReader wystąpienia.

Value

Po zastąpieniu w klasie pochodnej pobiera wartość tekstową bieżącego węzła.

ValueType

Pobiera typ środowiska uruchomieniowego języka wspólnego (CLR) dla bieżącego węzła.

XmlLang

Po zastąpieniu w klasie pochodnej pobiera bieżący xml:lang zakres.

XmlSpace

Po zastąpieniu w klasie pochodnej pobiera bieżący xml:space zakres.

Metody

Close()

Po przesłonięciu w klasie pochodnej zmienia wartość na ReadState Closed.

Create(Stream)

Tworzy nowe XmlReader wystąpienie przy użyciu określonego strumienia z ustawieniami domyślnymi.

Create(Stream, XmlReaderSettings)

Tworzy nowe XmlReader wystąpienie z określonym strumieniem i ustawieniami.

Create(Stream, XmlReaderSettings, String)

Tworzy nowe XmlReader wystąpienie przy użyciu określonego strumienia, podstawowego identyfikatora URI i ustawień.

Create(Stream, XmlReaderSettings, XmlParserContext)

Tworzy nowe XmlReader wystąpienie przy użyciu określonego strumienia, ustawień i informacji kontekstowych do analizowania.

Create(String)

Tworzy nowe XmlReader wystąpienie z określonym identyfikatorem URI.

Create(String, XmlReaderSettings)

Tworzy nowe XmlReader wystąpienie przy użyciu określonego identyfikatora URI i ustawień.

Create(String, XmlReaderSettings, XmlParserContext)

Tworzy nowe XmlReader wystąpienie przy użyciu określonego identyfikatora URI, ustawień i informacji kontekstowych do analizowania.

Create(TextReader)

Tworzy nowe XmlReader wystąpienie przy użyciu określonego czytnika tekstu.

Create(TextReader, XmlReaderSettings)

Tworzy nowe XmlReader wystąpienie przy użyciu określonego czytnika tekstu i ustawień.

Create(TextReader, XmlReaderSettings, String)

Tworzy nowe XmlReader wystąpienie przy użyciu określonego czytnika tekstu, ustawień i podstawowego identyfikatora URI.

Create(TextReader, XmlReaderSettings, XmlParserContext)

Tworzy nowe XmlReader wystąpienie przy użyciu określonego czytnika tekstu, ustawień i informacji kontekstowych na potrzeby analizowania.

Create(XmlReader, XmlReaderSettings)

Tworzy nowe XmlReader wystąpienie przy użyciu określonego czytnika i ustawień XML.

Dispose()

Zwalnia wszystkie zasoby używane przez bieżące wystąpienie klasy XmlReader.

Dispose(Boolean)

Zwalnia zasoby niezarządzane używane przez element XmlReader i opcjonalnie zwalnia zasoby zarządzane.

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetAttribute(Int32)

Po zastąpieniu w klasie pochodnej pobiera wartość atrybutu z określonym indeksem.

GetAttribute(String)

Po zastąpieniu w klasie pochodnej pobiera wartość atrybutu o określonej wartości Name.

GetAttribute(String, String)

Po zastąpieniu w klasie pochodnej pobiera wartość atrybutu o określonej wartości LocalName i NamespaceURI.

GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
GetValueAsync()

Asynchronicznie pobiera wartość bieżącego węzła.

IsName(String)

Zwraca wartość wskazującą, czy argument ciągu jest prawidłową nazwą XML.

IsNameToken(String)

Zwraca wartość wskazującą, czy argument ciągu jest prawidłowym tokenem nazwy XML.

IsStartElement()

Wywołuje MoveToContent() i sprawdza, czy bieżący węzeł zawartości jest tagiem początkowym lub pustym tagiem elementu.

IsStartElement(String)

Wywołuje MoveToContent() i sprawdza, czy bieżący węzeł zawartości jest tagiem początkowym lub pustym tagiem elementu, a Name właściwość znalezionego elementu jest zgodna z danym argumentem.

IsStartElement(String, String)

Wywołuje MoveToContent() i sprawdza, czy bieżący węzeł zawartości jest tagiem początkowym lub pustym tagiem elementu, a LocalName właściwości i NamespaceURI elementu znalezionego są zgodne z podanymi ciągami.

LookupNamespace(String)

Gdy zastąpisz klasę pochodną, rozpoznaje prefiks przestrzeni nazw w zakresie bieżącego elementu.

MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
MoveToAttribute(Int32)

Po przesłonięciu w klasie pochodnej przechodzi do atrybutu z określonym indeksem.

MoveToAttribute(String)

Po przesłonięciu w klasie pochodnej przechodzi do atrybutu o określonej wartości Name.

MoveToAttribute(String, String)

Po przesłonięciu w klasie pochodnej przechodzi do atrybutu o określonej wartości LocalName i NamespaceURI.

MoveToContent()

Sprawdza, czy bieżący węzeł jest zawartością (tekst inny niż biały, CDATA, Element, EndElement, EntityReferencelub EndEntity) węzła. Jeśli węzeł nie jest węzłem zawartości, czytnik pomija następny węzeł zawartości lub koniec pliku. Pomija on węzły następującego typu: ProcessingInstruction, , DocumentTypeComment, Whitespacelub SignificantWhitespace.

MoveToContentAsync()

Asynchronicznie sprawdza, czy bieżący węzeł jest węzłem zawartości. Jeśli węzeł nie jest węzłem zawartości, czytnik pomija następny węzeł zawartości lub koniec pliku.

MoveToElement()

Po przesłonięciu w klasie pochodnej przechodzi do elementu zawierającego bieżący węzeł atrybutu.

MoveToFirstAttribute()

Po przesłonięciu w klasie pochodnej zostanie przeniesiony do pierwszego atrybutu.

MoveToNextAttribute()

Po przesłonięciu w klasie pochodnej przechodzi do następnego atrybutu.

Read()

Po przesłonięciu w klasie pochodnej odczytuje następny węzeł ze strumienia.

ReadAsync()

Asynchronicznie odczytuje następny węzeł ze strumienia.

ReadAttributeValue()

Gdy zastąpisz klasę pochodną, analizuje wartość atrybutu na co najmniej Textjeden węzeł , EntityReferencelub EndEntity węzły.

ReadContentAs(Type, IXmlNamespaceResolver)

Odczytuje zawartość jako obiekt określonego typu.

ReadContentAsAsync(Type, IXmlNamespaceResolver)

Asynchronicznie odczytuje zawartość jako obiekt określonego typu.

ReadContentAsBase64(Byte[], Int32, Int32)

Odczytuje zawartość i zwraca dekodowane bajty binarne base64.

ReadContentAsBase64Async(Byte[], Int32, Int32)

Asynchronicznie odczytuje zawartość i zwraca dekodowane bajty binarne base64.

ReadContentAsBinHex(Byte[], Int32, Int32)

Odczytuje zawartość i zwraca BinHex zdekodowane bajty binarne.

ReadContentAsBinHexAsync(Byte[], Int32, Int32)

Asynchronicznie odczytuje zawartość i zwraca BinHex zdekodowane bajty binarne.

ReadContentAsBoolean()

Odczytuje zawartość tekstową w bieżącym położeniu jako Boolean.

ReadContentAsDateTime()

Odczytuje zawartość tekstową w bieżącej pozycji jako DateTime obiekt.

ReadContentAsDateTimeOffset()

Odczytuje zawartość tekstową w bieżącej pozycji jako DateTimeOffset obiekt.

ReadContentAsDecimal()

Odczytuje zawartość tekstową w bieżącej pozycji jako Decimal obiekt.

ReadContentAsDouble()

Odczytuje zawartość tekstową w bieżącej pozycji jako liczbę zmiennoprzecinkową o podwójnej precyzji.

ReadContentAsFloat()

Odczytuje zawartość tekstową w bieżącej pozycji jako liczbę zmiennoprzecinkową o pojedynczej precyzji.

ReadContentAsInt()

Odczytuje zawartość tekstową na bieżącej pozycji jako 32-bitową liczbę całkowitą ze znakiem.

ReadContentAsLong()

Odczytuje zawartość tekstową na bieżącej pozycji jako 64-bitową liczbę całkowitą ze znakiem.

ReadContentAsObject()

Odczytuje zawartość tekstową w bieżącej pozycji jako Object.

ReadContentAsObjectAsync()

Asynchronicznie odczytuje zawartość tekstową w bieżącej pozycji jako Object.

ReadContentAsString()

Odczytuje zawartość tekstową w bieżącej pozycji jako String obiekt.

ReadContentAsStringAsync()

Asynchronicznie odczytuje zawartość tekstową na bieżącej String pozycji jako obiekt.

ReadElementContentAs(Type, IXmlNamespaceResolver)

Odczytuje zawartość elementu jako żądany typ.

ReadElementContentAs(Type, IXmlNamespaceResolver, String, String)

Sprawdza, czy określona lokalna nazwa i identyfikator URI przestrzeni nazw są zgodne z bieżącym elementem, a następnie odczytuje zawartość elementu jako żądany typ.

ReadElementContentAsAsync(Type, IXmlNamespaceResolver)

Asynchronicznie odczytuje zawartość elementu jako żądany typ.

ReadElementContentAsBase64(Byte[], Int32, Int32)

Odczytuje element i dekoduje Base64 zawartość.

ReadElementContentAsBase64Async(Byte[], Int32, Int32)

Asynchronicznie odczytuje element i dekoduje Base64 zawartość.

ReadElementContentAsBinHex(Byte[], Int32, Int32)

Odczytuje element i dekoduje BinHex zawartość.

ReadElementContentAsBinHexAsync(Byte[], Int32, Int32)

Asynchronicznie odczytuje element i dekoduje BinHex zawartość.

ReadElementContentAsBoolean()

Odczytuje bieżący element i zwraca zawartość jako Boolean obiekt.

ReadElementContentAsBoolean(String, String)

Sprawdza, czy określona lokalna nazwa i identyfikator URI przestrzeni nazw są zgodne z bieżącym elementem, a następnie odczytuje bieżący element i zwraca zawartość jako Boolean obiekt.

ReadElementContentAsDateTime()

Odczytuje bieżący element i zwraca zawartość jako DateTime obiekt.

ReadElementContentAsDateTime(String, String)

Sprawdza, czy określona nazwa lokalna i identyfikator URI przestrzeni nazw jest zgodna z bieżącym elementem DateTime , a następnie odczytuje bieżący element i zwraca zawartość jako obiekt.

ReadElementContentAsDecimal()

Odczytuje bieżący element i zwraca zawartość jako Decimal obiekt.

ReadElementContentAsDecimal(String, String)

Sprawdza, czy określona nazwa lokalna i identyfikator URI przestrzeni nazw jest zgodna z bieżącym elementem Decimal , a następnie odczytuje bieżący element i zwraca zawartość jako obiekt.

ReadElementContentAsDouble()

Odczytuje bieżący element i zwraca zawartość jako liczbę zmiennoprzecinkową o podwójnej precyzji.

ReadElementContentAsDouble(String, String)

Sprawdza, czy określona nazwa lokalna i identyfikator URI przestrzeni nazw jest zgodna z bieżącym elementem, a następnie odczytuje bieżący element i zwraca zawartość jako liczbę zmiennoprzecinkową o podwójnej precyzji.

ReadElementContentAsFloat()

Odczytuje bieżący element i zwraca zawartość jako liczbę zmiennoprzecinkową o pojedynczej precyzji.

ReadElementContentAsFloat(String, String)

Sprawdza, czy określona lokalna nazwa i identyfikator URI przestrzeni nazw jest zgodna z bieżącym elementem, a następnie odczytuje bieżący element i zwraca zawartość jako liczbę zmiennoprzecinkową o pojedynczej precyzji.

ReadElementContentAsInt()

Odczytuje bieżący element i zwraca zawartość jako 32-bitową liczbę całkowitą ze znakiem.

ReadElementContentAsInt(String, String)

Sprawdza, czy określona lokalna nazwa i identyfikator URI przestrzeni nazw jest zgodna z bieżącym elementem, a następnie odczytuje bieżący element i zwraca zawartość jako 32-bitową liczbę całkowitą ze znakiem.

ReadElementContentAsLong()

Odczytuje bieżący element i zwraca zawartość jako 64-bitową liczbę całkowitą ze znakiem.

ReadElementContentAsLong(String, String)

Sprawdza, czy określona lokalna nazwa i identyfikator URI przestrzeni nazw jest zgodna z bieżącym elementem, a następnie odczytuje bieżący element i zwraca zawartość jako 64-bitową liczbę całkowitą ze znakiem.

ReadElementContentAsObject()

Odczytuje bieżący element i zwraca zawartość jako element Object.

ReadElementContentAsObject(String, String)

Sprawdza, czy określona lokalna nazwa i identyfikator URI przestrzeni nazw są zgodne z bieżącym elementem, a następnie odczytuje bieżący element i zwraca zawartość jako Object.

ReadElementContentAsObjectAsync()

Asynchronicznie odczytuje bieżący element i zwraca zawartość jako element Object.

ReadElementContentAsString()

Odczytuje bieżący element i zwraca zawartość jako String obiekt.

ReadElementContentAsString(String, String)

Sprawdza, czy określona lokalna nazwa i identyfikator URI przestrzeni nazw są zgodne z bieżącym elementem, a następnie odczytuje bieżący element i zwraca zawartość jako String obiekt.

ReadElementContentAsStringAsync()

Asynchronicznie odczytuje bieżący element i zwraca zawartość jako String obiekt.

ReadElementString()

Odczytuje element tylko tekst. Zalecamy jednak użycie ReadElementContentAsString() metody , ponieważ zapewnia ona prostszy sposób obsługi tej operacji.

ReadElementString(String)

Sprawdza, czy Name właściwość znalezionego elementu jest zgodna z danym ciągiem przed odczytaniem elementu tylko do tekstu. Zalecamy jednak użycie ReadElementContentAsString() metody , ponieważ zapewnia ona prostszy sposób obsługi tej operacji.

ReadElementString(String, String)

Sprawdza, czy LocalName właściwości i NamespaceURI znalezionego elementu są zgodne z podanymi ciągami przed odczytaniem elementu tylko do tekstu. Zalecamy jednak użycie ReadElementContentAsString(String, String) metody , ponieważ zapewnia ona prostszy sposób obsługi tej operacji.

ReadEndElement()

Sprawdza, czy bieżący węzeł zawartości jest tagiem końcowym i przechodzi czytelnika do następnego węzła.

ReadInnerXml()

Po zastąpieniu w klasie pochodnej odczytuje całą zawartość, w tym znaczniki, jako ciąg.

ReadInnerXmlAsync()

Asynchronicznie odczytuje całą zawartość, w tym znaczniki, jako ciąg.

ReadOuterXml()

Po zastąpieniu w klasie pochodnej odczytuje zawartość, w tym znaczniki reprezentujące ten węzeł i wszystkie jego elementy podrzędne.

ReadOuterXmlAsync()

Asynchronicznie odczytuje zawartość, w tym znaczniki reprezentujące ten węzeł i wszystkie jego elementy podrzędne.

ReadStartElement()

Sprawdza, czy bieżący węzeł jest elementem i przechodzi czytelnika do następnego węzła.

ReadStartElement(String)

Sprawdza, czy bieżący węzeł zawartości jest elementem z daną wartością Name i przechodzi czytelnika do następnego węzła.

ReadStartElement(String, String)

Sprawdza, czy bieżący węzeł zawartości jest elementem z daną wartością LocalName i NamespaceURI przechodzi czytelnika do następnego węzła.

ReadString()

Gdy zastąpisz klasę pochodną, odczytuje zawartość elementu lub węzła tekstowego jako ciąg. Zalecamy jednak użycie ReadElementContentAsString metody , ponieważ zapewnia bardziej prosty sposób obsługi tej operacji.

ReadSubtree()

Zwraca nowe XmlReader wystąpienie, które może służyć do odczytywania bieżącego węzła i wszystkich jego elementów podrzędnych.

ReadToDescendant(String)

XmlReader Przechodzi do następnego elementu potomnego z określoną kwalifikowaną nazwą.

ReadToDescendant(String, String)

XmlReader Przechodzi do następnego elementu podrzędnego z określoną lokalną nazwą i identyfikatorem URI przestrzeni nazw.

ReadToFollowing(String)

Odczytuje do momentu znalezienia elementu o określonej kwalifikowanej nazwie.

ReadToFollowing(String, String)

Odczytuje do momentu znalezienia elementu o określonej lokalnej nazwie i identyfikatorze URI przestrzeni nazw.

ReadToNextSibling(String)

XmlReader Przechodzi do następnego elementu równorzędnego z określoną kwalifikowaną nazwą.

ReadToNextSibling(String, String)

XmlReader Przechodzi do następnego elementu równorzędnego przy użyciu określonej lokalnej nazwy i identyfikatora URI przestrzeni nazw.

ReadValueChunk(Char[], Int32, Int32)

Odczytuje duże strumienie tekstu osadzone w dokumencie XML.

ReadValueChunkAsync(Char[], Int32, Int32)

Asynchronicznie odczytuje duże strumienie tekstu osadzonego w dokumencie XML.

ResolveEntity()

Po zastąpieniu w klasie pochodnej rozpoznaje odwołanie do jednostki dla EntityReference węzłów.

Skip()

Pomija elementy podrzędne bieżącego węzła.

SkipAsync()

Asynchronicznie pomija elementy podrzędne bieżącego węzła.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Jawne implementacje interfejsu

IDisposable.Dispose()

Aby uzyskać opis tego elementu członkowskiego, zobacz Dispose().

Dotyczy

Zobacz też