XmlReader Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Reprezentuje czytnik, który zapewnia szybki, niebuforowany, tylko do przekazywania 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ć asynchronicznego interfejsu API 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 XMLWeryfikowanie zgodności danych XMLNawigowanie po węzłach Odczytywanie elementówXML odczytywanie atrybutów XML odczytywaniezawartości XMLKonwertując na typy CLRAsynchronicznezagadnienia 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. Wartością domyślną jest nie zezwalanie na przetwarzanie DTD. |
ValidationType Właściwość | Określa, czy czytelnik powinien weryfikować dane, oraz jakiego typu walidację 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 program obsługi zdarzeń nie zostanie podany, XmlException zostanie zgłoszony pierwszy błąd weryfikacji. |
ValidationFlags Właściwość | Dodatkowe opcje weryfikacji za pośrednictwem elementów XmlSchemaValidationFlags 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 --Process identity constraints (xs:ID , xs:IDREF , xs:key , xs:keyref , ) xs:unique napotkano podczas walidacji. (Domyślnie włączone).- ProcessSchemaLocation --Przetwarzaj schematy 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łaszaj zdarzenia, jeśli wystąpi ostrzeżenie o walidacji. Ostrzeżenie jest zwykle wyświetlane, 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 weryfikacji. |
XmlResolver Właściwość | Element do rozpoznawania i uzyskiwania XmlResolver dostępu do zasobów zewnętrznych. Może to obejmować jednostki zewnętrzne, takie jak DTD i schematy, oraz wszystkie xs:include elementy zawarte xs:import w schemacie XML. Jeśli nie określisz elementu XmlResolver, XmlReader zostanie użyta wartość domyślna XmlUrlResolver bez poświadczeń użytkownika. |
Zgodność danych
Czytniki XML utworzone za pomocą Create metody 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 rozwijane.
Atrybuty domyślne zadeklarowane w definicji typu dokumentu są zawsze dodawane nawet wtedy, gdy czytnik nie weryfikuje.
Deklaracja prefiksu XML mapowana na prawidłowy identyfikator URI przestrzeni nazw XML jest dozwolona.
Nazwy notacji w pojedynczej
NotationType
deklaracji atrybutu iNmTokens
w pojedynczejEnumeration
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 Typowe konstrukcje składniowe 2.3 zalecenia W3C XML 1.0. Jeśli ta właściwość jest ustawiona na true (wartość domyślna), zgłaszany jest wyjątek, XmlException 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 CheckCharacters powoduje false wyłączenie sprawdzania znaków dla odwołań do jednostki znaków. Jeśli czytnik 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 istnieje 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 zgodna z regułami fragmentu dobrze sformułowanego 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 |
Nawigowanie po węzłach
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 IsStartElementRead, 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. 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 Text węźle , EntityReference lub 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:
Ogranicz zasoby, do których XmlReader może uzyskiwać dostęp, ustawiając XmlReaderSettings.XmlResolver właściwość na XmlSecureResolver obiekt.
Nie zezwalaj XmlReader na otwieranie jakichkolwiek zasobów zewnętrznych przez ustawienie XmlReaderSettings.XmlResolver właściwości na
null
.
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, XmlResolverXmlReaderSettings 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:
Ogranicz rozmiar dokumentu, ustawiając MaxCharactersInDocument właściwość .
Ogranicz liczbę znaków, które wynikają z rozszerzania jednostek, ustawiając MaxCharactersFromEntities właściwość .
Utwórz niestandardową
IStream
implementację dla elementu XmlReader.
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 |
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 |
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 |
XmlSpace |
Po zastąpieniu w klasie pochodnej pobiera bieżący |
Metody
Close() |
Po przesłonięciu w klasie pochodnej zmienia wartość na ReadStateClosed. |
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 bieżące wystąpienie. (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, |
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 |
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 |
ReadContentAsBinHexAsync(Byte[], Int32, Int32) |
Asynchronicznie odczytuje zawartość i zwraca |
ReadContentAsBoolean() |
Odczytuje zawartość tekstową w bieżącej pozycji jako |
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 nazwa lokalna i identyfikator URI przestrzeni nazw jest zgodna 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 |
ReadElementContentAsBase64Async(Byte[], Int32, Int32) |
Asynchronicznie odczytuje element i dekoduje |
ReadElementContentAsBinHex(Byte[], Int32, Int32) |
Odczytuje element i dekoduje |
ReadElementContentAsBinHexAsync(Byte[], Int32, Int32) |
Asynchronicznie odczytuje element i dekoduje |
ReadElementContentAsBoolean() |
Odczytuje bieżący element i zwraca zawartość jako Boolean obiekt. |
ReadElementContentAsBoolean(String, String) |
Sprawdza, czy określona nazwa lokalna i identyfikator URI przestrzeni nazw jest zgodna z bieżącym elementem Boolean , a następnie odczytuje bieżący element i zwraca zawartość jako 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 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 pojedynczej precyzji. |
ReadElementContentAsInt() |
Odczytuje bieżący element i zwraca zawartość jako liczbę całkowitą z podpisem 32-bitowym. |
ReadElementContentAsInt(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 32-bitową liczbę całkowitą podpisaną. |
ReadElementContentAsLong() |
Odczytuje bieżący element i zwraca zawartość jako liczbę całkowitą z podpisem 64-bitowym. |
ReadElementContentAsLong(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 64-bitową liczbę całkowitą podpisaną. |
ReadElementContentAsObject() |
Odczytuje bieżący element i zwraca zawartość jako Objectelement . |
ReadElementContentAsObject(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 Object. |
ReadElementContentAsObjectAsync() |
Asynchronicznie odczytuje bieżący element i zwraca zawartość jako Objectelement . |
ReadElementContentAsString() |
Odczytuje bieżący element i zwraca zawartość jako String obiekt. |
ReadElementContentAsString(String, String) |
Sprawdza, czy określona nazwa lokalna i identyfikator URI przestrzeni nazw jest zgodna z bieżącym elementem String , a następnie odczytuje bieżący element i zwraca zawartość jako 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 bardziej prosty 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 bardziej prosty 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 bardziej prosty 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() |
Gdy zastąpisz klasę pochodną, 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 |
ReadToDescendant(String) |
XmlReader Przechodzi do następnego elementu podrzędnego o określonej kwalifikowanej nazwie. |
ReadToDescendant(String, String) |
XmlReader Przechodzi do następnego elementu potomnego przy użyciu określonego lokalnego identyfikatora URI i 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) |
|
ReadToNextSibling(String, String) |
|
ReadValueChunk(Char[], Int32, Int32) |
Odczytuje duże strumienie tekstu osadzonego 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 |
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(). |