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 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 0
de .
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
retourne1<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.
}
}