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

Définition

Lit le contenu du texte d’un élément dans une mémoire tampon de caractères. Cette méthode est conçue pour lire de grands flux de texte incorporé en l’appelant successivement.

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 qui sert de mémoire tampon dans laquelle le contenu du texte est écrit.

index
Int32

Position dans buffer laquelle la méthode peut commencer à écrire du contenu du texte.

count
Int32

Nombre de caractères à écrire dans buffer.

Retours

Nombre de caractères lus. Cela peut être 0 si le lecteur n’est pas positionné sur un élément ou s’il n’y a plus de contenu de texte à retourner dans le contexte actuel.

Exceptions

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

La buffer valeur est null.

index < 0 ou count< 0.

Exemples

L’exemple suivant lit en XML à l’aide ReadCharsde .

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 utilise le items.xml fichier 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

Note

Nous vous recommandons de créer des instances XmlReader à l’aide de la méthode XmlReader.Create pour tirer parti de nouvelles fonctionnalités.

Il s’agit du moyen le plus efficace de traiter des flux de texte très volumineux incorporés dans un document XML. Au lieu d’allouer des objets de 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 provoquent ReadChars un retour 0.

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 dispose des 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 0.

  • Cette méthode retourne le contenu du caractère réel. Il n’existe aucune tentative de résolution des entités, CDATA ou tout autre balisage rencontré. ReadChars retourne tout 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 elle a atteint la fin du flux de caractères, elle retourne la valeur 0 et le lecteur est positionné après la balise de fin.

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

Par exemple, à l’aide du 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