XmlTextReader.ReadChars(Char[], Int32, Int32) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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
ReadCharsle 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é.
ReadCharsretourne tout entre la balise de début et la balise de fin, y compris le balisage.ReadCharsignore 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,ReadCharsretourne1<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
ReadCharselle 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.
}
}