XmlTextReader.GetRemainder Method

Definition

Gets the remainder of the buffered XML.

public:
 System::IO::TextReader ^ GetRemainder();
public System.IO.TextReader GetRemainder ();
member this.GetRemainder : unit -> System.IO.TextReader
Public Function GetRemainder () As TextReader

Returns

A TextReader containing the remainder of the buffered XML.

Examples

The following example reads the first part of an XML document and then uses GetRemainder to complete reading the document using a second reader.

#using <System.Xml.dll>

using namespace System;
using namespace System::Xml;
int main()
{
   String^ filename = "tworeads.xml";
   XmlTextReader^ reader = gcnew XmlTextReader( filename );
   reader->WhitespaceHandling = WhitespaceHandling::None;
   
   // Read the first part of the XML document
   while ( reader->Read() )
   {
      
      // Display the elements and stop reading on the book endelement tag
      // then go to ReadPart2 to start another reader to read the rest of the file. 
      switch ( reader->NodeType )
      {
         case XmlNodeType::Element:
            Console::WriteLine( "Name: {0}", reader->Name );
            break;

         case XmlNodeType::Text:
            Console::WriteLine( "  Element Text: {0}", reader->Value );
            break;

         case XmlNodeType::EndElement:
            
            // Stop reading when the reader gets to the end element of the book node.
            if ( "book" == reader->LocalName )
            {
               Console::WriteLine( "End reading first book..." );
               Console::WriteLine();
               goto ReadPart2;
            }
            break;
      }
   }

   
   // Read the rest of the XML document
   
ReadPart2:
   Console::WriteLine( "Begin reading second book..." );
   
   // Create a new reader to read the rest of the document.
   XmlTextReader^ reader2 = gcnew XmlTextReader( reader->GetRemainder() );
   while ( reader2->Read() )
   {
      switch ( reader2->NodeType )
      {
         case XmlNodeType::Element:
            Console::WriteLine( "Name: {0}", reader2->Name );
            break;

         case XmlNodeType::Text:
            Console::WriteLine( "  Element Text: {0}", reader2->Value );
            break;

         case XmlNodeType::EndElement:
            
            // Stop reading when the reader gets to the end element of the book node.
            if ( "book" == reader2->LocalName )
            {
               Console::WriteLine( "End reading second book..." );
               goto Done;
            }
            break;
      }
   }

   
Done:
   Console::WriteLine( "Done." );
   reader->Close();
   reader2->Close();
}
using System;
using System.Xml;

public class Sample {

  private static string filename = "tworeads.xml";

  public static void Main() {

    XmlTextReader reader = new XmlTextReader(filename);
    reader.WhitespaceHandling=WhitespaceHandling.None;

    // Read the first part of the XML document
    while(reader.Read()) {
      // Display the elements and stop reading on the book endelement tag
      // then go to ReadPart2 to start another reader to read the rest of the file.
      switch(reader.NodeType) {
       case XmlNodeType.Element:
        Console.WriteLine("Name: {0}", reader.Name);
        break;
       case XmlNodeType.Text:
        Console.WriteLine("  Element Text: {0}", reader.Value);
        break;
       case XmlNodeType.EndElement:
        // Stop reading when the reader gets to the end element of the book node.
        if ("book"==reader.LocalName) {
          Console.WriteLine("End reading first book...");
          Console.WriteLine();
          goto ReadPart2;
        }
        break;
      }
    }

    // Read the rest of the XML document
    ReadPart2:
    Console.WriteLine("Begin reading second book...");

    // Create a new reader to read the rest of the document.
    XmlTextReader reader2 = new XmlTextReader(reader.GetRemainder());

    while(reader2.Read()) {
      switch (reader2.NodeType) {
        case XmlNodeType.Element:
         Console.WriteLine("Name: {0}", reader2.Name);
         break;
        case XmlNodeType.Text:
         Console.WriteLine("  Element Text: {0}", reader2.Value);
         break;
        case XmlNodeType.EndElement:
         // Stop reading when the reader gets to the end element of the book node.
         if ("book"==reader2.LocalName) {
           Console.WriteLine("End reading second book...");
           goto Done;
         }
         break;
      }
    }

    Done:
    Console.WriteLine("Done.");
    reader.Close();
    reader2.Close();
  }
}//End class
Imports System.Xml

Public Class Sample
    Private Shared filename As String = "tworeads.xml"
    
    Public Shared Sub Main()

        Dim reader As New XmlTextReader(filename)
        reader.WhitespaceHandling = WhitespaceHandling.None
        
        ' Read the first part of the XML document
        While reader.Read()
            ' Display the elements and stop reading on the book endelement tag
            ' then go to ReadPart2 to start another reader to read the rest of the file. 
            Select Case reader.NodeType
                Case XmlNodeType.Element
                    Console.WriteLine("Name: {0}", reader.Name)
                Case XmlNodeType.Text
                    Console.WriteLine("  Element Text: {0}", reader.Value)
                Case XmlNodeType.EndElement
                    ' Stop reading when the reader gets to the end element of the book node.
                    If "book" = reader.LocalName Then
                        Console.WriteLine("End reading first book...")
                        Console.WriteLine()
                        GoTo ReadPart2
                    End If
            End Select
        End While
        
        ' Read the rest of the XML document
        ReadPart2: 
        Console.WriteLine("Begin reading second book...")
        
        ' Create a new reader to read the rest of the document.
        Dim reader2 As New XmlTextReader(reader.GetRemainder())
        
        While reader2.Read()
            Select Case reader2.NodeType
                Case XmlNodeType.Element
                    Console.WriteLine("Name: {0}", reader2.Name)
                Case XmlNodeType.Text
                    Console.WriteLine("  Element Text: {0}", reader2.Value)
                Case XmlNodeType.EndElement
                    'Stop reading when the reader gets to the end element of the book node.
                    If "book" = reader2.LocalName Then
                        Console.WriteLine("End reading second book...")
                        GoTo Done
                    End If
            End Select
        End While
        
        Done: 
        Console.WriteLine("Done.")
        reader.Close()
        reader2.Close()
    End Sub
End Class

The example uses the input file tworeads.xml.

<?xml version="1.0" ?>
<bookstore>
 <book>
  <title>Pride And Prejudice</title>
  <author>Jane Austen</author>
 </book>
 <book>
  <title>The Handmaid's Tale</title>
  <author>Margaret Atwood</author>
 </book>
</bookstore>

Remarks

Note

Starting with the .NET Framework 2.0, we recommend that you create XmlReader instances by using the XmlReader.Create method to take advantage of new functionality.

Because XmlTextReader does a buffered Read, it must be able to return the remainder of the unused buffer so that no data is lost. This allows protocols (such as multi-part MIME) to package XML in the same stream as other things.

After calling this method, EOF is set to true.

Applies to

See also