XmlTextReader.ReadChars(Char[], Int32, Int32) Yöntem

Tanım

Bir öğenin metin içeriğini karakter arabelleğine okur. Bu yöntem, büyük katıştırılmış metin akışlarını ardışık olarak çağırarak okumak için tasarlanmıştır.

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

Parametreler

buffer
Char[]

Metin içeriğinin yazıldığı arabellek görevi görecek karakter dizisi.

index
Int32

Yöntemin metin içeriğini yazmaya başlayabildiği konum buffer .

count
Int32

içine yazacak bufferkarakter sayısı.

Döndürülenler

Okunan karakter sayısı. Bu, okuyucu bir öğeye konumlandırılmadıysa veya geçerli bağlamda döndürülecek başka metin içeriği yoksa olabilir 0 .

Özel durumlar

count içinde belirtilen buffer alandan büyüktür (arabellek boyutu - index).

buffer değeri null.

index < 0veya .count< 0

Örnekler

Aşağıdaki örnek kullanarak ReadCharsXML'de okur.

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

Örnek, girdi olarak dosyasını kullanır items.xml .


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

Açıklamalar

Note

XmlReader öneririz. Yeni işlevlerden yararlanmak için XmlReader.Create yöntemini kullanarak örnekler oluşturmanız.

Bu, XML belgesine eklenmiş çok büyük metin akışlarını işlemenin en verimli yoludur. Büyük dize nesnelerini ayırmak yerine, ReadChars metin içeriğini bir kerede bir arabelleğe döndürür. Bu yöntem yalnızca öğe düğümlerinde çalışacak şekilde tasarlanmıştır. Diğer düğüm türleri döndürülmeye ReadCharsneden olur0.

Aşağıdaki XML'de, okuyucu başlangıç etiketine konumlandırılmışsa okuyucuyu ReadChars döndürür test ve bitiş etiketinden sonra konumlandırılır.

<Item>test</Item>

ReadChars aşağıdaki işlevlere sahiptir:

  • Bu yöntem yalnızca öğe düğümlerinde çalışacak şekilde tasarlanmıştır. Diğer düğüm türleri 0 döndürmesine neden olur ReadChars .

  • Bu yöntem gerçek karakter içeriğini döndürür. Varlıkları, CDATA'yı veya karşılaşılan başka bir işaretlemeyi çözümleme girişimi yoktur. ReadChars , işaretleme dahil olmak üzere başlangıç etiketi ile bitiş etiketi arasındaki her şeyi döndürür.

  • ReadChars düzgün biçimlendirilmemiş XML işaretlemesini yoksayar. Örneğin, aşağıdaki XML dizesini <A>1<A>2</A>okurken döndürür ReadChars1<A>2</A>. (Eşleşen öğe çiftinden işaretleme döndürür ve diğerlerini yoksayar.)

  • Bu yöntem herhangi bir normalleştirme yapmaz.

  • ReadChars Karakter akışının sonuna ulaştığında 0 değerini döndürür ve okuyucu bitiş etiketinden sonra konumlandırılır.

  • öznitelik okuma yöntemleri kullanılırken ReadCharskullanılamaz.

Örneğin, aşağıdaki XML'yi kullanarak:

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

Okuyucu while döngüsünün <item> sonunda öğesinde konumlandırılır.

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

Şunlara uygulanır

Ayrıca bkz.