XmlTextReader.ReadChars(Char[], Int32, Int32) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Bir öğenin metin içeriğini karakter arabelleğine okur. Bu yöntem, ekli metinleri ardışık olarak çağırarak büyük metin akışlarını okumak için tasarlanmıştır.
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
Parametreler
- buffer
- Char[]
Metin içeriğinin yazıldığı arabellek görevi gören karakter dizisi.
- index
- Int32
yönteminin metin içeriği yazmaya başlayabildiği konum buffer
.
- count
- Int32
içine buffer
yazacak karakter sayısı.
Döndürülenler
Okunan karakter sayısı. Bu, okuyucu bir öğeye konumlandırılmadıysa veya geçerli bağlamda döndürülecek başka metin içeriği yoksa olabilir 0
.
Özel durumlar
count
içinde belirtilen buffer
alandan büyüktür (arabellek boyutu - index
).
buffer
değeri null
olur.
index
< 0
veya .count
< 0
Örnekler
Aşağıdaki örnek kullanarak ReadChars
XML'de okur.
#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
Örnekte giriş olarak dosya kullanılır items.xml
.
<?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>
Açıklamalar
Not
.NET Framework 2.0'dan başlayarak, yeni işlevlerden yararlanmak için yöntemini kullanarak XmlReader.Create örnekler oluşturmanızı XmlReader öneririz.
Bu, XML belgesine eklenmiş çok büyük metin akışlarını işlemenin en verimli yoludur. Büyük dize nesnelerini ayırmaktansa, ReadChars
metin içeriğini bir kerede arabelleğe döndürür. Bu yöntem yalnızca öğe düğümlerinde çalışacak şekilde tasarlanmıştır. Diğer düğüm türleri döndürülmeye 0
neden olurReadChars
.
Aşağıdaki XML'de okuyucu başlangıç etiketine konumlandırılmışsa okuyucuyu ReadChars
test
döndürür ve bitiş etiketinden sonra yerleştirir.
<Item>test</Item>
ReadChars
aşağıdaki işlevlere sahiptir:
Bu yöntem yalnızca öğe düğümleri üzerinde çalışacak şekilde tasarlanmıştır. Diğer düğüm türlerinin 0 döndürmesine neden olur
ReadChars
.Bu yöntem gerçek karakter içeriğini döndürür. Varlıkları, CDATA'yı veya karşılaşılan başka bir işaretlemeyi çözümleme girişimi yoktur.
ReadChars
, işaretleme dahil olmak üzere başlangıç etiketiyle bitiş etiketi arasındaki her şeyi döndürür.ReadChars
düzgün biçimlendirilmemiş XML işaretlemelerini yoksayar. Örneğin, aşağıdaki XML dizesini<A>1<A>2</A>
okurken döndürürReadChars
1<A>2</A>
. (Eşleşen öğe çiftinden işaretleme döndürür ve diğerlerini yoksayar.)Bu yöntem herhangi bir normalleştirme yapmaz.
ReadChars
Karakter akışının sonuna ulaştığında 0 değerini döndürür ve okuyucu bitiş etiketinden sonra konumlandırılır.öznitelik okuma yöntemleri kullanılırken
ReadChars
kullanılamaz.
Örneğin, aşağıdaki XML'yi kullanarak:
<thing>
some text
</thing>
<item>
</item>
Okuyucu while döngüsünün <item>
sonunda öğeye konumlandırılır.
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.
}
}