XmlTextReader.ReadChars(Char[], Int32, Int32) Méthode

Définition

Lit le texte d'un élément dans une mémoire tampon de caractères. Cette méthode est conçue pour lire des flux importants de texte incorporé en l'appelant de manière successive.

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

Paramètres

buffer
Char[]

Tableau de caractères servant de mémoire tampon dans laquelle le texte est écrit.

index
Int32

Emplacement dans buffer à partir duquel la méthode peut écrire du texte.

count
Int32

Nombre de caractères à écrire dans buffer.

Retours

Nombre de caractères à lire. Il peut s'agir de 0 si le lecteur n'est pas placé sur un élément ou s'il n'existe plus de texte à retourner dans le contexte actuel.

Exceptions

count est supérieur à l’espace spécifié dans le buffer (taille de mémoire tampon - index).

buffer a la valeur null.

index< 0 ou count< 0.

Exemples

L’exemple suivant lit en XML à l’aide de ReadChars.

#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

L'exemple prend le fichier items.xml comme entrée.


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

Remarques

Notes

À compter de .NET Framework 2.0, nous vous recommandons de créer XmlReader des instances à l’aide de la XmlReader.Create méthode pour tirer parti des nouvelles fonctionnalités.

Il s’agit de la façon la plus efficace de traiter de très grands flux de texte incorporés dans un document XML. Au lieu d’allouer des objets chaîne volumineux, ReadChars retourne le contenu du texte une mémoire tampon à la fois. Cette méthode est conçue pour fonctionner uniquement sur les nœuds d’élément. D’autres types de nœuds entraînent ReadChars le retour 0de .

Dans le code XML suivant, si le lecteur est positionné sur la balise de début, ReadChars retourne test et positionne le lecteur après la balise de fin.

<Item>test</Item>

ReadChars offre les fonctionnalités suivantes :

  • Cette méthode est conçue pour fonctionner uniquement sur les nœuds d’élément. D’autres types de nœuds entraînent ReadChars le retour de 0.

  • Cette méthode retourne le contenu du caractère réel. Aucune tentative de résolution d’entités, de CDATA ou de tout autre balisage n’a été rencontrée. ReadChars retourne tout ce qui se trouve entre la balise de début et la balise de fin, y compris le balisage.

  • ReadChars ignore le balisage XML qui n’est pas bien formé. Par exemple, lors de la lecture de la chaîne <A>1<A>2</A>XML suivante , ReadChars retourne 1<A>2</A>. (Elle retourne le balisage de la paire d’éléments correspondante et ignore les autres.)

  • Cette méthode n’effectue aucune normalisation.

  • Quand ReadChars a atteint la fin du flux de caractères, il retourne la valeur 0 et le lecteur est positionné après la balise de fin.

  • Les méthodes de lecture d’attribut ne sont pas disponibles lors de l’utilisation de ReadChars.

Par exemple, en utilisant le code XML suivant :

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

Le lecteur est positionné sur l’élément <item> à la fin de la boucle while.

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

S’applique à

Voir aussi