XmlTextReader.ReadChars(Char[], Int32, Int32) Methode

Definitie

Leest de tekstinhoud van een element in een tekenbuffer. Deze methode is ontworpen om grote stromen in ingesloten tekst te lezen door deze achtereenvolgens aan te roepen.

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

Parameters

buffer
Char[]

De matrix van tekens die fungeert als de buffer waarnaar de tekstinhoud wordt geschreven.

index
Int32

De positie waar buffer de methode kan beginnen met het schrijven van tekstinhoud.

count
Int32

Het aantal tekens dat moet worden geschreven in buffer.

Retouren

Het aantal tekens dat wordt gelezen. Dit kan zijn 0 als de lezer niet is geplaatst op een element of als er geen tekstinhoud meer is om terug te keren in de huidige context.

Uitzonderingen

count is groter dan de ruimte die is opgegeven in de buffer (buffergrootte - index).

De buffer waarde is null.

index < 0 of count< 0.

Voorbeelden

In het volgende voorbeeld wordt in XML gelezen met behulp van 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

In het voorbeeld wordt het items.xml bestand als invoer gebruikt.


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

Opmerkingen

Note

Wij raden aan dat u XmlReader instanties maakt met behulp van de XmlReader.Create methode om te profiteren van nieuwe functionaliteiten.

Dit is de meest efficiƫnte manier om zeer grote stromen tekst te verwerken die zijn ingesloten in een XML-document. In plaats van grote tekenreeksobjecten toe te wijzen, ReadChars retourneert u tekstinhoud een buffer tegelijk. Deze methode is ontworpen om alleen te werken op elementknooppunten. Andere knooppunttypen zorgen ervoor ReadChars dat deze worden geretourneerd 0.

Als de lezer in de volgende XML op de starttag staat, ReadChars retourneert test en plaatst u de lezer na de eindtag.

<Item>test</Item>

ReadChars heeft de volgende functionaliteit:

  • Deze methode is alleen ontworpen om te werken op elementknooppunten. Andere knooppunttypen zorgen ervoor ReadChars dat er 0 wordt geretourneerd.

  • Deze methode retourneert de werkelijke tekeninhoud. Er is geen poging om entiteiten, CDATA of andere markeringen op te lossen. ReadChars retourneert alles tussen de begintag en de eindtag, inclusief markeringen.

  • ReadChars negeert XML-markeringen die niet goed zijn opgemaakt. Als u bijvoorbeeld de volgende XML-tekenreeks <A>1<A>2</A>leest, ReadChars wordt deze geretourneerd 1<A>2</A>. (Hiermee worden markeringen van het overeenkomende elementpaar geretourneerd en worden anderen genegeerd.)

  • Deze methode voert geen normalisatie uit.

  • Wanneer ReadChars het einde van de tekenstroom is bereikt, wordt de waarde 0 geretourneerd en wordt de lezer na de eindtag weergegeven.

  • Kenmerkleesmethoden zijn niet beschikbaar tijdens het gebruik van ReadChars.

Gebruik bijvoorbeeld de volgende XML:

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

De lezer bevindt zich op het element aan het <item> einde van de while-lus.

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

Van toepassing op

Zie ook