XmlTextReader.ReadChars(Char[], Int32, Int32) Metódus

Definíció

Egy elem szövegtartalmat olvas be egy karakterpufferbe. Ez a módszer úgy lett kialakítva, hogy egymás után meghívva nagy mennyiségű beágyazott szöveget olvasson be.

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éterek

buffer
Char[]

A szöveg tartalmát tartalmazó pufferként szolgáló karakterek tömbje.

index
Int32

Az a pozíció buffer , ahol a metódus megkezdheti a szövegtartalom írását.

count
Int32

A beírandó bufferkarakterek száma.

Válaszok

Az olvasási karakterek száma. Ez akkor fordulhat 0 elő, ha az olvasó nem egy elemen van elhelyezve, vagy ha nincs több szöveges tartalom, amelyet vissza szeretne adni az aktuális környezetben.

Kivételek

count nagyobb, mint a buffer (pufferméret – index).

Az buffer érték a következő null: .

index < 0 vagy count< 0.

Példák

Az alábbi példa XML-ben olvasható a következő paranccsel 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

A példa a items.xml fájlt használja bemenetként.


<?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>

Megjegyzések

Note

Javasoljuk, hogy az új funkciók kihasználásához hozzon létre XmlReader példányokat a XmlReader.Create metódus használatával.

Ez a leghatékonyabb módszer az XML-dokumentumokba beágyazott nagy méretű szövegfolyamok feldolgozására. A nagy sztringobjektumok ReadChars kiosztása helyett egyszerre puffert ad vissza a szöveges tartalomnak. Ez a módszer csak elemcsomópontokon használható. Más csomóponttípusok is okozhatják ReadChars a visszatérést 0.

A következő XML-ben, ha az olvasó a kezdőcímkén van elhelyezve, ReadChars a zárócímke test után adja vissza és helyezi el az olvasót.

<Item>test</Item>

ReadChars a következő funkciókkal rendelkezik:

  • Ez a módszer csak elemcsomópontokon használható. Más csomóponttípusok 0 értéket adnak ReadChars vissza.

  • Ez a metódus a tényleges karaktertartalmat adja vissza. Nincs kísérlet entitások, CDATA vagy bármilyen más korrektúra feloldására. ReadChars A kezdőcímke és a zárócímke közötti mindent visszaad, beleértve a korrektúrát is.

  • ReadChars figyelmen kívül hagyja a nem megfelelően formázott XML-korrektúrát. Ha például a következő XML-sztringet <A>1<A>2</A>olvassa be, ReadChars az eredmény 1<A>2</A>. (Visszaadja a korrektúrát az egyező elempárból, és figyelmen kívül hagy másokat.)

  • Ez a módszer nem végez normalizálást.

  • Amikor ReadChars elérte a karakterfolyam végét, a 0 értéket adja vissza, és az olvasó a végcímke után van elhelyezve.

  • Az attribútumolvasási metódusok nem érhetők el a használata ReadCharssorán.

Használja például a következő XML-t:

<thing>
 some text
</thing>
<item>
</item>

Az olvasó a <item> ciklus végén található elemen van elhelyezve.

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.
 }
}

A következőre érvényes:

Lásd még