XmlTextReader.ReadChars(Char[], Int32, Int32) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
要素のテキストの内容を文字バッファーに読み取ります。 このメソッドは、連続して呼び出すことによって埋め込みテキストの大量のストリームを読み取るように設計されています。
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
パラメーター
- buffer
- Char[]
テキストの内容が書き込まれるバッファーとして機能する文字の配列。
- index
- Int32
メソッドがテキストの内容の書き込みを開始できる buffer
内の位置。
- count
- Int32
buffer
に書き込む文字数。
戻り値
読み取った文字数。 リーダーが要素に配置されていない場合、または返す対象となるテキストの内容が現在のコンテキスト内にこれ以上ない場合は、0
になる可能性があります。
例外
count
が buffer
(バッファー サイズ - index
) で指定した値を超えています。
buffer
値は null
です。
index
< 0
または count
< 0
。
例
次の例では、 を使用して ReadChars
XML を読み取ります。
#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
この例は、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>
注釈
注意
.NET Framework 2.0 以降では、 メソッドを使用してXmlReader.Create新しい機能を利用してインスタンスを作成XmlReaderすることをお勧めします。
これは、XML ドキュメントに埋め込まれた非常に大きなテキスト ストリームを処理する最も効率的な方法です。 大きな文字列オブジェクトを割り当てるのではなく、 ReadChars
テキスト コンテンツを一度にバッファーとして返します。 このメソッドは、要素ノードでのみ機能するように設計されています。 その他のノードの種類では ReadChars
、 が返されます 0
。
次の XML では、リーダーが開始タグに配置されている場合は、 を返test
し、ReadChars
リーダーを終了タグの後に配置します。
<Item>test</Item>
ReadChars
には、次の機能があります。
このメソッドは、要素ノードでのみ機能するように設計されています。 その他のノードの種類では
ReadChars
、0 が返されます。このメソッドは、実際の文字コンテンツを返します。 エンティティ、CDATA、またはその他のマークアップを解決しようとすることはありません。
ReadChars
は、マークアップを含む開始タグと終了タグの間のすべてを返します。ReadChars
は、整形式ではない XML マークアップを無視します。 たとえば、次の XML 文字列<A>1<A>2</A>
ReadChars
を読み取ると、 は を返します1<A>2</A>
。 (一致する要素ペアからマークアップを返し、他の要素を無視します)。このメソッドは正規化を行いません。
文字ストリームの末尾に達すると
ReadChars
、値 0 が返され、リーダーは終了タグの後に配置されます。属性の読み取りメソッドは、 の使用中
ReadChars
は使用できません。
たとえば、次の XML を使用します。
<thing>
some text
</thing>
<item>
</item>
リーダーは while ループの <item>
末尾にある 要素に配置されます。
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.
}
}
適用対象
こちらもご覧ください
.NET