XmlTextReader.ReadChars(Char[], Int32, Int32) Methode

Definition

Liest den Textinhalt eines Elements in einen Zeichenpuffer. Diese Methode wurde entwickelt, um große Datenströme von eingebetteten Text durch aufeinander folgende 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, an buffer der die Methode mit dem Schreiben von Textinhalten beginnen kann.

count
Int32

Die Anzahl der Zeichen, in die geschrieben werden buffersoll.

Gibt zurück

Die Anzahl der gelesenen Zeichen. Dies kann sein 0 , wenn der Leser nicht auf einem Element positioniert ist oder wenn im aktuellen Kontext keine weiteren Textinhalte zurückgegeben werden sollen.

Ausnahmen

count ist größer als der in der buffer Puffergröße indexangegebene Abstand - ).

Der wert buffer ist null.

index < 0 oder count< 0.

Beispiele

Das folgende Beispiel liest in XML mithilfe von ReadChars.

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

Im Beispiel wird die items.xml Datei 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

Note

Es wird empfohlen, XmlReader-Instanzen mithilfe der XmlReader.Create-Methode zu erstellen, 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. Statt große Zeichenfolgenobjekte zu zuordnen, ReadChars werden Textinhalte gleichzeitig als Puffer zurückgegeben. Diese Methode ist so konzipiert, dass sie nur auf Elementknoten funktioniert. Andere Knotentypen verursachen eine ReadChars Rückgabe 0.

Wenn der Reader im folgenden XML-Code auf dem Starttag positioniert ist, ReadChars wird der Reader nach dem Endtag zurückgegeben test und positioniert.

<Item>test</Item>

ReadChars verfügt über die folgenden Funktionen:

  • Diese Methode ist nur für Elementknoten ausgelegt. Andere Knotentypen führen ReadChars dazu, 0 zurückzugeben.

  • Diese Methode gibt den tatsächlichen Zeicheninhalt zurück. Es gibt keinen Versuch, 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, wird ReadChars zurückgegeben 1<A>2</A>. (Es gibt Markup aus dem übereinstimmenden Elementpaar zurück und ignoriert andere.)

  • Diese Methode führt keine Normalisierung durch.

  • Wenn ReadChars das Ende des Zeichendatenstroms erreicht ist, gibt sie den Wert 0 zurück, und der Leser wird nach dem Endtag positioniert.

  • Attributlesemethoden sind bei verwendung ReadCharsnicht verfügbar.

Verwenden Sie z. B. den folgenden XML-Code:

<thing>
 some text
</thing>
<item>
</item>

Der Leser wird am Ende der Schleife auf dem <item> Element 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.
 }
}

Gilt für:

Weitere Informationen