Aracılığıyla paylaş


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

Tanım

Bir öğenin metin içeriğini karakter arabelleğine okur. Bu yöntem, ekli metinleri ardışık olarak çağırarak büyük metin akışlarını 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ören karakter dizisi.

index
Int32

yönteminin metin içeriği yazmaya başlayabildiği konum buffer .

count
Int32

içine bufferyazacak karakter 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 olur.

index < 0veya .count< 0

Örnekler

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

#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

Örnekte giriş olarak dosya kullanılı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

Not

.NET Framework 2.0'dan başlayarak, yeni işlevlerden yararlanmak için yöntemini kullanarak XmlReader.Create örnekler oluşturmanızı XmlReader öneririz.

Bu, XML belgesine eklenmiş çok büyük metin akışlarını işlemenin en verimli yoludur. Büyük dize nesnelerini ayırmaktansa, ReadChars metin içeriğini bir kerede 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 0neden olurReadChars.

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

<Item>test</Item>

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

  • Bu yöntem yalnızca öğe düğümleri üzerinde çalışacak şekilde tasarlanmıştır. Diğer düğüm türlerinin 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ıç etiketiyle bitiş etiketi arasındaki her şeyi döndürür.

  • ReadChars düzgün biçimlendirilmemiş XML işaretlemelerini 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 öğeye 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.