XmlTextReader.ReadChars(Char[], Int32, Int32) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Lee el contenido de texto de un elemento en un búfer de caracteres. Este método está diseñado para leer grandes secuencias de texto incrustado llamando sucesivamente.
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
Parámetros
- buffer
- Char[]
Matriz de caracteres que actúa como el búfer al que se escribe el contenido del texto.
- index
- Int32
Posición dentro de buffer donde el método puede comenzar a escribir contenido de texto.
- count
- Int32
Número de caracteres que se van a escribir en buffer.
Devoluciones
Número de caracteres leídos. Esto puede ser 0 si el lector no está colocado en un elemento o si no hay más contenido de texto que devolver en el contexto actual.
Excepciones
count es mayor que el espacio especificado en (tamaño del buffer búfer - index).
El valor de buffer es null.
index
< 0 o count< 0.
Ejemplos
En el ejemplo siguiente se lee en XML mediante ReadChars.
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
En el ejemplo se usa el items.xml archivo como entrada.
<?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>
Comentarios
Note
Se recomienda crear XmlReader instancias mediante el XmlReader.Create método para aprovechar las nuevas funcionalidades.
Esta es la manera más eficaz de procesar secuencias de texto muy grandes incrustadas en un documento XML. En lugar de asignar objetos de cadena grandes, ReadChars devuelve contenido de texto un búfer a la vez. Este método está diseñado para funcionar solo en nodos de elemento. Otros tipos de nodo hacen que ReadChars devuelva 0.
En el siguiente XML, si el lector está colocado en la etiqueta de inicio, ReadChars devuelve test y coloca el lector después de la etiqueta final.
<Item>test</Item>
ReadChars tiene la siguiente funcionalidad:
Este método está diseñado para funcionar solo en nodos de elemento. Otros tipos de nodo hacen
ReadCharsque devuelva 0.Este método devuelve el contenido real del carácter. No hay ningún intento de resolver entidades, CDATA ni ningún otro marcado encontrado.
ReadCharsdevuelve todo lo que hay entre la etiqueta de inicio y la etiqueta final, incluido el marcado.ReadCharsomite el marcado XML que no tiene el formato correcto. Por ejemplo, al leer la siguiente cadena<A>1<A>2</A>XML ,ReadCharsdevuelve1<A>2</A>. (Devuelve el marcado del par de elementos coincidente y omite otros).Este método no realiza ninguna normalización.
Cuando
ReadCharsha llegado al final de la secuencia de caracteres, devuelve el valor 0 y el lector se coloca después de la etiqueta final.Los métodos de lectura de atributos no están disponibles mientras se usa
ReadChars.
Por ejemplo, con el código XML siguiente:
<thing>
some text
</thing>
<item>
</item>
El lector se coloca en el <item> elemento al final del bucle 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.
}
}