XmlTextReader.ReadChars(Char[], Int32, Int32) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Liest den Textinhalt eines Elements in einen Zeichenpuffer. Diese Methode ist dafür entworfen, umfangreiche Streams mit eingebettetem Text mithilfe aufeinander folgender Aufrufe zu lesen.
public:
int ReadChars(cli::array <char> ^ buffer, int index, int count);
public int ReadChars (char[] buffer, int index, int count);
member this.ReadChars : char[] * int * int -> int
Public Function ReadChars (buffer As Char(), index As Integer, count As Integer) As Integer
Parameter
- buffer
- Char[]
Das Array von Zeichen, das als Puffer dient, in den der Textinhalt geschrieben wird.
- index
- Int32
Die Position innerhalb des buffer
, an der die Methode mit dem Schreiben von Textinhalt beginnen kann.
- count
- Int32
Die Anzahl der in den buffer
zu schreibenden Zeichen.
Gibt zurück
Die Anzahl von gelesenen Zeichen. Diese kann 0
(null) sein, wenn der Reader nicht auf einem Element positioniert ist oder kein weiterer Textinhalt vorhanden ist, der im aktuellen Kontext zurückgegeben werden kann.
Ausnahmen
count
ist größer als der in buffer
angegebene Bereich (Puffergröße – index
).
Der buffer
-Wert ist null
.
index
< 0
oder count
< 0
.
Beispiele
Im folgenden Beispiel wird in XML mithilfe von ReadChars
gelesen.
#using <System.Xml.dll>
using namespace System;
using namespace System::Xml;
// Reads an XML document using ReadChars
int main()
{
XmlTextReader^ reader = nullptr;
String^ filename = "items.xml";
try
{
// Declare variables used by ReadChars
array<Char>^buffer;
int iCnt = 0;
int charbuffersize;
// Load the reader with the data file. Ignore white space.
reader = gcnew XmlTextReader( filename );
reader->WhitespaceHandling = WhitespaceHandling::None;
// Set variables used by ReadChars.
charbuffersize = 10;
buffer = gcnew array<Char>(charbuffersize);
// Parse the file. Read the element content
// using the ReadChars method.
reader->MoveToContent();
while ( (iCnt = reader->ReadChars( buffer, 0, charbuffersize )) > 0 )
{
// Print out chars read and the buffer contents.
Console::WriteLine( " Chars read to buffer:{0}", iCnt );
Console::WriteLine( " Buffer: [{0}]", gcnew String( buffer,0,iCnt ) );
// Clear the buffer.
Array::Clear( buffer, 0, charbuffersize );
}
}
finally
{
if ( reader != nullptr )
reader->Close();
}
}
using System;
using System.Xml;
// Reads an XML document using ReadChars
public class Sample {
private const String filename = "items.xml";
public static void Main() {
XmlTextReader reader = null;
try {
// Declare variables used by ReadChars
Char []buffer;
int iCnt = 0;
int charbuffersize;
// Load the reader with the data file. Ignore white space.
reader = new XmlTextReader(filename);
reader.WhitespaceHandling = WhitespaceHandling.None;
// Set variables used by ReadChars.
charbuffersize = 10;
buffer = new Char[charbuffersize];
// Parse the file. Read the element content
// using the ReadChars method.
reader.MoveToContent();
while ( (iCnt = reader.ReadChars(buffer,0,charbuffersize)) > 0 ) {
// Print out chars read and the buffer contents.
Console.WriteLine (" Chars read to buffer:" + iCnt);
Console.WriteLine (" Buffer: [{0}]", new String(buffer,0,iCnt));
// Clear the buffer.
Array.Clear(buffer,0,charbuffersize);
}
}
finally {
if (reader!=null)
reader.Close();
}
}
} // End class
Imports System.Xml
' Reads an XML document using ReadChars
Public Class Sample
Private Const filename As String = "items.xml"
Public Shared Sub Main()
Dim reader As XmlTextReader = Nothing
Try
' Declare variables used by ReadChars
Dim buffer() As Char
Dim iCnt As Integer = 0
Dim charbuffersize As Integer
' Load the reader with the data file. Ignore white space.
reader = New XmlTextReader(filename)
reader.WhitespaceHandling = WhitespaceHandling.None
' Set variables used by ReadChars.
charbuffersize = 10
buffer = New Char(charbuffersize) {}
' Parse the file. Read the element content
' using the ReadChars method.
reader.MoveToContent()
iCnt = reader.ReadChars(buffer,0,charbuffersize)
while (iCnt > 0)
' Print out chars read and the buffer contents.
Console.WriteLine(" Chars read to buffer:" & iCnt)
Console.WriteLine(" Buffer: [{0}]", New String(buffer, 0, iCnt))
' Clear the buffer.
Array.Clear(buffer, 0, charbuffersize)
iCnt = reader.ReadChars(buffer,0,charbuffersize)
end while
Finally
If Not (reader Is Nothing) Then
reader.Close()
End If
End Try
End Sub
End Class
In diesem Beispiel wird die Datei items.xml
als Eingabe verwendet.
<?xml version="1.0"?>
<!-- This is a sample XML document -->
<!DOCTYPE Items [<!ENTITY number "123">]>
<Items>
<Item>Test with an entity: &number;</Item>
<Item>test with a child element <more/> stuff</Item>
<Item>test with a CDATA section <![CDATA[<456>]]> def</Item>
<Item>Test with an char entity: A</Item>
<!-- Fourteen chars in this element.-->
<Item>1234567890ABCD</Item>
</Items>
Hinweise
Hinweis
Ab dem .NET Framework 2.0 wird empfohlen, Instanzen mithilfe der XmlReader.Create -Methode zu erstellenXmlReader, um neue Funktionen zu nutzen.
Dies ist die effizienteste Möglichkeit, sehr große Textströme zu verarbeiten, die in ein XML-Dokument eingebettet sind. Anstatt große Zeichenfolgenobjekte zuzuweisen, ReadChars
gibt Textinhalt gleichzeitig einen Puffer zurück. Diese Methode ist so konzipiert, dass sie nur auf Elementknoten funktioniert. Andere Knotentypen führen ReadChars
dazu, dass zurückgegeben wird 0
.
Wenn der Reader im folgenden XML-Code auf dem Starttag positioniert ist, ReadChars
wird der Reader zurückgegeben test
und nach dem Endtag positioniert.
<Item>test</Item>
ReadChars
verfügt über die folgenden Funktionen:
Diese Methode ist nur für Elementknoten konzipiert. Andere Knotentypen führen
ReadChars
dazu, dass 0 zurückgegeben wird.Diese Methode gibt den tatsächlichen Zeicheninhalt zurück. Es wird nicht versucht, Entitäten, CDATA oder ein anderes Markup aufzulösen.
ReadChars
gibt alles zwischen dem Starttag und dem Endtag zurück, einschließlich Markup.ReadChars
ignoriert xml-Markup, das nicht wohlgeformt ist. Wenn Sie beispielsweise die folgende XML-Zeichenfolge<A>1<A>2</A>
lesen,ReadChars
wird zurückgegeben1<A>2</A>
. (Es gibt Markup vom übereinstimmenden Elementpaar zurück und ignoriert andere.)Diese Methode führt keine Normalisierung durch.
Wenn
ReadChars
das Ende des Zeichendatenstroms erreicht ist, wird der Wert 0 zurückgegeben, und der Reader wird nach dem Endtag positioniert.Methoden zum Lesen von Attributen sind bei Verwendung
ReadChars
von nicht verfügbar.
Verwenden Sie beispielsweise den folgenden XML-Code:
<thing>
some text
</thing>
<item>
</item>
Der Reader wird auf dem <item>
Element am Ende der while-Schleife positioniert.
if (XmlNodeType.Element == reader.NodeType && "thing" == reader.Name)
{
while(0 != reader.ReadChars(buffer, 0, 1)
{
// Do something.
// Attribute values are not available at this point.
}
}