System.Xml.XmlNodeReader Class

Assembly: System.Xml.dll
Namespace: System.Xml
Summary
Represents a reader that provides fast, non-cached forward only access to XML data in an XmlNode.
C# Syntax:
public class XmlNodeReader : XmlReader
Remarks
The XmlNodeReader has the ability to read an XML DOM subtree. This class does not support DTD or schema validation. To perform data validation, use the XmlValidatingReader.

To read strongly typed data, use the XmlConvert class. For example, the following C# code reads in data and converts it from a String to a Double.

          Double price = XmlConvert.ToDouble(reader.Value);
        

For further discussion on the XmlReader classes, see the conceptual topic at MSDN: readingxmlwithxmlreader.

See also:
System.Xml Namespace

System.Xml.XmlNodeReader Member List:

Public Constructors
ctor #1 Creates an instance of the XmlNodeReader class using the specified XmlNode.
Public Properties
AttributeCount Read-only

Overridden:
Gets the number of attributes on the current node.
BaseURI Read-only

Overridden:
Gets the base URI of the current node.
CanResolveEntity Read-only

Overridden:
Gets a value indicating whether this reader can parse and resolve entities.
Depth Read-only

Overridden:
Gets the depth of the current node in the XML document.
EOF Read-only

Overridden:
Gets a value indicating whether the reader is positioned at the end of the stream.
HasAttributes Read-only

Overridden:
Gets a value indicating whether the current node has any attributes.
HasValue Read-only

Overridden:
Gets a value indicating whether the current node can have a XmlNodeReader.Value.
IsDefault Read-only

Overridden:
Gets a value indicating whether the current node is an attribute that was generated from the default value defined in the DTD or schema.
IsEmptyElement Read-only

Overridden:
Gets a value indicating whether the current node is an empty element (for example, <MyElement/> ).
Item Read-only

Overloaded:
Item[int i] {get

Overridden:
Gets the value of the attribute with the specified index.
Item Read-only

Overloaded:
Item[string name] {get

Overridden:
Gets the value of the attribute with the specified name.
Item Read-only

Overloaded:
Item[string name, string namespaceURI] {get

Overridden:
Gets the value of the attribute with the specified local name and namespace URI.
LocalName Read-only

Overridden:
Gets the local name of the current node.
Name Read-only

Overridden:
Gets the qualified name of the current node.
NamespaceURI Read-only

Overridden:
Gets the namespace URI (as defined in the W3C Namespace specification) of the node on which the reader is positioned.
NameTable Read-only

Overridden:
Gets the XmlNameTable associated with this implementation.
NodeType Read-only

Overridden:
Gets the type of the current node.
Prefix Read-only

Overridden:
Gets the namespace prefix associated with the current node.
QuoteChar Read-only

Overridden:
Gets the quotation mark character used to enclose the value of an attribute node.
ReadState Read-only

Overridden:
Gets the state of the reader.
Value Read-only

Overridden:
Gets the text value of the current node.
XmlLang Read-only

Overridden:
Gets the current xml:lang scope.
XmlSpace Read-only

Overridden:
Gets the current xml:space scope.
Public Methods
Close Overridden:
Changes the XmlNodeReader.ReadState to Closed.
Equals
(inherited from System.Object)
See base class member description: System.Object.Equals

Derived from System.Object, the primary base class for all objects.
GetAttribute Overloaded:
GetAttribute(int attributeIndex)

Overridden:
Gets the value of the attribute with the specified index.
GetAttribute Overloaded:
GetAttribute(string name)

Overridden:
Gets the value of the attribute with the specified name.
GetAttribute Overloaded:
GetAttribute(string name, string namespaceURI)

Overridden:
Gets the value of the attribute with the specified local name and namespace URI.
GetHashCode
(inherited from System.Object)
See base class member description: System.Object.GetHashCode

Derived from System.Object, the primary base class for all objects.
GetType
(inherited from System.Object)
See base class member description: System.Object.GetType

Derived from System.Object, the primary base class for all objects.
IsStartElement
(inherited from System.Xml.XmlReader)
Overloaded:
IsStartElement()

See base class member description: System.Xml.XmlReader.IsStartElement


Calls XmlReader.MoveToContent and tests if the current content node is a start tag or empty element tag.
IsStartElement
(inherited from System.Xml.XmlReader)
Overloaded:
IsStartElement(string name)

See base class member description: System.Xml.XmlReader.IsStartElement


Calls XmlReader.MoveToContent and tests if the current content node is a start tag or empty element tag and if the XmlReader.Name property of the element found matches the given argument.
IsStartElement
(inherited from System.Xml.XmlReader)
Overloaded:
IsStartElement(string localname, string ns)

See base class member description: System.Xml.XmlReader.IsStartElement


Calls XmlReader.MoveToContent and tests if the current content node is a start tag or empty element tag and if the XmlReader.LocalName and XmlReader.NamespaceURI properties of the element found match the given strings.
LookupNamespace Overridden:
Resolves a namespace prefix in the current element's scope.
MoveToAttribute Overloaded:
MoveToAttribute(int attributeIndex)

Overridden:
Moves to the attribute with the specified index.
MoveToAttribute Overloaded:
MoveToAttribute(string name)

Overridden:
Moves to the attribute with the specified name.
MoveToAttribute Overloaded:
MoveToAttribute(string name, string namespaceURI)

Overridden:
Moves to the attribute with the specified local name and namespace URI.
MoveToContent
(inherited from System.Xml.XmlReader)
See base class member description: System.Xml.XmlReader.MoveToContent


Checks whether the current node is a content (non-white space text, CDATA, Element, EndElement, EntityReference, or EndEntity) node. If the node is not a content node, the reader skips ahead to the next content node or end of file. It skips over nodes of the following type: ProcessingInstruction, DocumentType, Comment, Whitespace, or SignificantWhitespace.
MoveToElement Overridden:
Moves to the element that contains the current attribute node.
MoveToFirstAttribute Overridden:
Moves to the first attribute.
MoveToNextAttribute Overridden:
Moves to the next attribute.
Read Overridden:
Reads the next node from the stream.
ReadAttributeValue Overridden:
Parses the attribute value into one or more Text, EntityReference, or EndEntity nodes.
ReadElementString
(inherited from System.Xml.XmlReader)
Overloaded:
ReadElementString()

See base class member description: System.Xml.XmlReader.ReadElementString


Reads a text-only element.
ReadElementString
(inherited from System.Xml.XmlReader)
Overloaded:
ReadElementString(string name)

See base class member description: System.Xml.XmlReader.ReadElementString


Checks that the XmlReader.Name property of the element found matches the given string before reading a text-only element.
ReadElementString
(inherited from System.Xml.XmlReader)
Overloaded:
ReadElementString(string localname, string ns)

See base class member description: System.Xml.XmlReader.ReadElementString


Checks that the XmlReader.LocalName and XmlReader.NamespaceURI properties of the element found matches the given strings before reading a text-only element.
ReadEndElement
(inherited from System.Xml.XmlReader)
See base class member description: System.Xml.XmlReader.ReadEndElement


Checks that the current content node is an end tag and advances the reader to the next node.
ReadInnerXml Overridden:
Reads all the content, including markup, as a string.
ReadOuterXml Overridden:
Reads the content, including markup, representing this node and all its children.
ReadStartElement
(inherited from System.Xml.XmlReader)
Overloaded:
ReadStartElement()

See base class member description: System.Xml.XmlReader.ReadStartElement


Checks that the current node is an element and advances the reader to the next node.
ReadStartElement
(inherited from System.Xml.XmlReader)
Overloaded:
ReadStartElement(string name)

See base class member description: System.Xml.XmlReader.ReadStartElement


Checks that the current content node is an element with the given XmlReader.Name and advances the reader to the next node.
ReadStartElement
(inherited from System.Xml.XmlReader)
Overloaded:
ReadStartElement(string localname, string ns)

See base class member description: System.Xml.XmlReader.ReadStartElement


Checks that the current content node is an element with the given XmlReader.LocalName and XmlReader.NamespaceURI and advances the reader to the next node.
ReadString Overridden:
Reads the contents of an element or text node as a string.
ResolveEntity Overridden:
Resolves the entity reference for EntityReference nodes.
Skip Overridden:
Skips the children of the current node.
ToString
(inherited from System.Object)
See base class member description: System.Object.ToString

Derived from System.Object, the primary base class for all objects.
Protected Methods
Finalize
(inherited from System.Object)
See base class member description: System.Object.Finalize

Derived from System.Object, the primary base class for all objects.
MemberwiseClone
(inherited from System.Object)
See base class member description: System.Object.MemberwiseClone

Derived from System.Object, the primary base class for all objects.

Hierarchy:


System.Xml.XmlNodeReader Member Details

ctor #1
Summary
Creates an instance of the XmlNodeReader class using the specified XmlNode.
C# Syntax:
public XmlNodeReader(
   XmlNode node
);
Parameters:

node

The XmlNode you want to read.

Remarks
The following C# code creates an XmlNodeReader.
              XmlDocument doc = new XmlDocument();
              doc.Load("sample.xml");
              XmlNodeReader reader = new XmlNodeReader(doc);
            

Return to top


Overridden Property: AttributeCount (read-only)
Summary
Gets the number of attributes on the current node.
C# Syntax:
public override int AttributeCount {get;}
Remarks
This property is relevant to Element, DocumentType and XmlDeclaration nodes only. (Other node types do not have attributes.)
Example
The following example reads all the attributes on the root node.
using System;
using System.IO;
using System.Xml;

public class Sample 
{
  public static void Main()
  {
    XmlNodeReader reader = null;

    try
    {
       //Create and load the XML document.
       XmlDocument doc = new XmlDocument();
       doc.LoadXml("<book genre='novel' ISBN='1-861003-78' publicationdate='1987'> " +
                   "</book>"); 

       //Load the XmlNodeReader 
       reader = new XmlNodeReader(doc);
  
       //Read the attributes on the root element.
       reader.MoveToContent();
       if (reader.HasAttributes){
         for (int i=0; i<reader.AttributeCount; i++){
            reader.MoveToAttribute(i);
            Console.WriteLine("{0} = {1}", reader.Name, reader.Value);
         }
         //Return the reader to the book element.
         reader.MoveToElement();
       }

     } 

     finally 
     {
        if (reader != null)
          reader.Close();
      }
  }
  
} // End class

    

Return to top


Overridden Property: BaseURI (read-only)
Summary
Gets the base URI of the current node.
C# Syntax:
public override string BaseURI {get;}
Remarks
A networked XML document is comprised of chunks of data aggregated using various W3C standard inclusion mechanisms and therefore contains nodes that come from different places. DTD entities are an example of this, but this is not limited to DTDs. The base URI tells you where these nodes came from. If there is no base URI for the nodes being returned (for example, they were parsed from an in-memory string), String.Empty is returned.
Example
The following example parses a file and displays the base URI of each of the nodes.
using System;
using System.IO;
using System.Xml;

public class Sample
{
  public static void Main()
  {
    XmlNodeReader reader = null;

    try
    {           
        //Create and load an XmlDocument.
        XmlDocument doc = new XmlDocument();
        doc.Load("http://localhost/uri.xml");

        reader = new XmlNodeReader(doc);

        //Parse the file and display the base URI for each node.
        while (reader.Read())
        {
            Console.WriteLine("({0}) {1}", reader.NodeType, reader.BaseURI);
         }           
     }

     finally
     {
       if (reader!=null)
         reader.Close();
     }
  }
} // End class

    
The example uses the file, uri.xml, as input. The style.xml file contains the XML text <style>hardcover</style> .

<!-- XML fragment -->
<!DOCTYPE book [<!ENTITY s SYSTEM "tmp/style.xml">]>
<book genre="novel">
  <title>Pride And Prejudice</title>
  <misc>&s;</misc>
</book>

    

Return to top


Overridden Property: CanResolveEntity (read-only)
Summary
Gets a value indicating whether this reader can parse and resolve entities.
C# Syntax:
public override bool CanResolveEntity {get;}

Return to top


Overridden Property: Depth (read-only)
Summary
Gets the depth of the current node in the XML document.
C# Syntax:
public override int Depth {get;}

Return to top


Overridden Property: EOF (read-only)
Summary
Gets a value indicating whether the reader is positioned at the end of the stream.
C# Syntax:
public override bool EOF {get;}

Return to top


Overridden Property: HasAttributes (read-only)
Summary
Gets a value indicating whether the current node has any attributes.
C# Syntax:
public override bool HasAttributes {get;}
Example
The following example reads all the attributes on the root node.
using System;
using System.IO;
using System.Xml;

public class Sample 
{
  public static void Main()
  {
    XmlNodeReader reader = null;

    try
    {
       //Create and load the XML document.
       XmlDocument doc = new XmlDocument();
       doc.LoadXml("<book genre='novel' ISBN='1-861003-78' publicationdate='1987'> " +
                   "</book>"); 

       //Load the XmlNodeReader 
       reader = new XmlNodeReader(doc);
  
       //Read the attributes on the root element.
       reader.MoveToContent();
       if (reader.HasAttributes){
         for (int i=0; i<reader.AttributeCount; i++){
            reader.MoveToAttribute(i);
            Console.WriteLine("{0} = {1}", reader.Name, reader.Value);
         }
         //Return the reader to the book element.
         reader.MoveToElement();
       }

     } 

     finally 
     {
        if (reader != null)
          reader.Close();
      }
  }
  
} // End class

    

Return to top


Overridden Property: HasValue (read-only)
Summary
Gets a value indicating whether the current node can have a XmlNodeReader.Value.
C# Syntax:
public override bool HasValue {get;}
Remarks
The following table lists node types that have a value to return.

Node Type Value
Attribute The value of the attribute.
CDATA The content of the CDATA section.
Comment The content of the comment.
DocumentType The internal subset.
ProcessingInstruction The entire content, excluding the target.
SignificantWhitespace The white space between markup in a mixed content model.
Text The content of the text node.
Whitespace The white space between markup.
XmlDeclaration The content of the declaration.
Example
The following example displays the value for every node which can have a value.
using System;
using System.IO;
using System.Xml;

public class Sample
{

  public static void Main()
  {
    XmlNodeReader reader = null;

    try
    {           
        //Create and load an XmlDocument.
        XmlDocument doc = new XmlDocument();
        doc.LoadXml("<?xml version='1.0' ?>" +
                    "<!DOCTYPE book [<!ENTITY h 'hardcover'>]>" +
                    "<book>" +
                    "<title>Pride And Prejudice</title>" +
                    "<misc>&h;</misc>" +
                    "</book>");

        reader = new XmlNodeReader(doc);

        //Parse the file and display each node.
        while (reader.Read())
        {
           if (reader.HasValue)
             Console.WriteLine("({0})  {1}={2}", reader.NodeType, reader.Name, reader.Value);
           else
             Console.WriteLine("({0}) {1}", reader.NodeType, reader.Name);
         }           
     }

     finally
     {
       if (reader!=null)
         reader.Close();
     }
  }
} // End class

    

Return to top


Overridden Property: IsDefault (read-only)
Summary
Gets a value indicating whether the current node is an attribute that was generated from the default value defined in the DTD or schema.
C# Syntax:
public override bool IsDefault {get;}
Remarks
This property applies to attribute nodes only. If the reader is not positioned on an attribute node, this property returns false.

Return to top


Overridden Property: IsEmptyElement (read-only)
Summary
Gets a value indicating whether the current node is an empty element (for example, <MyElement/> ).
C# Syntax:
public override bool IsEmptyElement {get;}
Remarks
This property enables you to determine the difference between the following:

<item bar="123"/> (IsEmptyElement is true).

<item bar="123"> (IsEmptyElement is false).

A corresponding EndElement node is not generated for empty elements.

Example
The following example displays the text content of each element.
using System;
using System.IO;
using System.Xml;

public class Sample 
{
  public static void Main()
  {
    XmlNodeReader reader = null;

    try
    {
       //Create and load the XML document.
       XmlDocument doc = new XmlDocument();
       doc.LoadXml("<book>" +
                   "<title>Pride And Prejudice</title>" +
                   "<price>19.95</price>" +
                   "<misc/>" +
                   "</book>"); 

       //Load the XmlNodeReader 
       reader = new XmlNodeReader(doc);
  
       //Parse the XML and display the text content of each of the elements.
       while (reader.Read()){
         if (reader.IsStartElement()){
           if (reader.IsEmptyElement)
              Console.WriteLine("<{0}/>", reader.Name);
           else{
               Console.Write("<{0}> ", reader.Name);
               reader.Read(); //Read the start tag.
               if (reader.IsStartElement())  //Handle nested elements.
                   Console.Write("\r\n<{0}>", reader.Name);
               Console.WriteLine(reader.ReadString());  //Read the text content of the element.
           }
         }
       } 
       
     } 

     finally 
     {
        if (reader != null)
          reader.Close();
      }
  }
  
} // End class

    

Return to top


Overloaded Property: Item (read-only)
Summary
Gets the value of the attribute with the specified index.
C# Syntax:
public override string this[int i] {get;}
Parameters:

i

The index of the attribute.

Exceptions
Exception Type Condition
ArgumentOutOfRangeException The i parameter is less than 0 or greater than or equal to XmlNodeReader.AttributeCount.
Remarks
This property does not move the reader.
See also:
XmlNodeReader.GetAttribute

Return to top


Overloaded Property: Item (read-only)
Summary
Gets the value of the attribute with the specified name.
C# Syntax:
public override string this[string name] {get;}
Parameters:

name

The qualified name of the attribute.

Remarks
This property does not move the reader. If the reader is positioned on a DocumentType node, this method can be used to get the PUBLIC and SYSTEM literals, for example, reader["PUBLIC"]
Example
The following example gets the value of the ISBN attribute.
using System;
using System.IO;
using System.Xml;

public class Sample 
{
  public static void Main()
  {
    XmlNodeReader reader = null;

    try
    {
       //Create and load the XML document.
       XmlDocument doc = new XmlDocument();
       doc.LoadXml("<book genre='novel' ISBN='1-861003-78' publicationdate='1987'> " +
                   "</book>"); 

       // Load the XmlNodeReader 
       reader = new XmlNodeReader(doc);
  
       //Read the ISBN attribute.
       reader.MoveToContent();
       string isbn =reader["ISBN"];
       Console.WriteLine("The ISBN value: " + isbn);

     } 

     finally 
     {
        if (reader != null)
          reader.Close();
      }
  }
  
} // End class

    
See also:
XmlNodeReader.GetAttribute

Return to top


Overloaded Property: Item (read-only)
Summary
Gets the value of the attribute with the specified local name and namespace URI.
C# Syntax:
public override string this[string name, string namespaceURI] {get;}
Parameters:

name

The local name of the attribute.

namespaceURI

The namespace URI of the attribute.

Remarks
This property does not move the reader.
See also:
XmlNodeReader.GetAttribute

Return to top


Overridden Property: LocalName (read-only)
Summary
Gets the local name of the current node.
C# Syntax:
public override string LocalName {get;}
Example
The following example displays the local name of each node, and, if they exist, the prefix and namespace URI.
using System;
using System.IO;
using System.Xml;

public class Sample 
{
  public static void Main()
  {
    XmlNodeReader reader = null;

    try
    {
       //Create and load the XML document.
       XmlDocument doc = new XmlDocument();
       doc.LoadXml("<book xmlns:bk='urn:samples'> " +
                   "<title>Pride And Prejudice</title>" +
                   "<bk:genre>novel</bk:genre>" +
                   "</book>"); 

       //Load the XmlNodeReader 
       reader = new XmlNodeReader(doc);
  
       //Parse the XML.  If they exist, display the prefix and  
       //namespace URI of each node.
       while (reader.Read()){
         if (reader.IsStartElement()){
           if (reader.Prefix==String.Empty)
              Console.WriteLine("<{0}>", reader.LocalName);
           else{
               Console.Write("<{0}:{1}>", reader.Prefix, reader.LocalName);
               Console.WriteLine(" The namespace URI is " + reader.NamespaceURI);
           }
         }
       }
       
     } 
     finally 
     {
        if (reader != null)
          reader.Close();
      }
  }
  
} // End class

    

Return to top


Overridden Property: Name (read-only)
Summary
Gets the qualified name of the current node.
C# Syntax:
public override string Name {get;}
Example
The following example reads an XML and displays each of the nodes.
using System;
using System.IO;
using System.Xml;

public class Sample
{
  private const String filename = "items.xml";

  public static void Main()
  {
    XmlNodeReader reader = null;

    try
    {           
        //Create an XmlNodeReader to read the XmlDocument.
        XmlDocument doc = new XmlDocument();
        doc.Load(filename);
        reader = new XmlNodeReader(doc);

        //Parse the file and display each of the nodes.
        while (reader.Read())
        {
           switch (reader.NodeType)
           {
             case XmlNodeType.Element:
               Console.Write("<{0}>", reader.Name);
               break;
             case XmlNodeType.Text:
               Console.Write(reader.Value);
               break;
             case XmlNodeType.CDATA:
               Console.Write(reader.Value);
               break;
             case XmlNodeType.ProcessingInstruction:
               Console.Write("<?{0} {1}?>", reader.Name, reader.Value);
               break;
             case XmlNodeType.Comment:
               Console.Write("<!--{0}-->", reader.Value);
               break;
             case XmlNodeType.XmlDeclaration:
               Console.Write("<?xml version='1.0'?>");
               break;
             case XmlNodeType.Document:
               break;
             case XmlNodeType.EndElement:
               Console.Write("</{0}>", reader.Name);
               break;
           }       
          }           
        }

     finally
     {
       if (reader!=null)
         reader.Close();
     }
  }
} // End class

    
The example uses the file, items.xml, as input.

<?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 a char entity: &#65;</Item>
  <!-- Fourteen chars in this element.-->
  <Item>1234567890ABCD</Item>
</Items>

    

Return to top


Overridden Property: NamespaceURI (read-only)
Summary
Gets the namespace URI (as defined in the W3C Namespace specification) of the node on which the reader is positioned.
C# Syntax:
public override string NamespaceURI {get;}
Remarks
This property is relevant to Element and Attribute nodes only.
Example
The following example displays the local name of each node, and, if they exist, the prefix and namespace URI.
using System;
using System.IO;
using System.Xml;

public class Sample 
{
  public static void Main()
  {
    XmlNodeReader reader = null;

    try
    {
       //Create and load the XML document.
       XmlDocument doc = new XmlDocument();
       doc.LoadXml("<book xmlns:bk='urn:samples'> " +
                   "<title>Pride And Prejudice</title>" +
                   "<bk:genre>novel</bk:genre>" +
                   "</book>"); 

       //Load the XmlNodeReader 
       reader = new XmlNodeReader(doc);
  
       //Parse the XML.  If they exist, display the prefix and  
       //namespace URI of each node.
       while (reader.Read()){
         if (reader.IsStartElement()){
           if (reader.Prefix==String.Empty)
              Console.WriteLine("<{0}>", reader.LocalName);
           else{
               Console.Write("<{0}:{1}>", reader.Prefix, reader.LocalName);
               Console.WriteLine(" The namespace URI is " + reader.NamespaceURI);
           }
         }
       }
       
     } 
     finally 
     {
        if (reader != null)
          reader.Close();
      }
  }
  
} // End class

    

Return to top


Overridden Property: NameTable (read-only)
Summary
Gets the XmlNameTable associated with this implementation.
C# Syntax:
public override XmlNameTable NameTable {get;}
Remarks
All node and attribute names returned from this class are atomized using the NameTable. When the same name is returned multiple times (for example, Customer), then the same String object will be returned for that name. This makes it possible for you to write efficient code that does object comparisons on these strings instead of expensive string comparisons.
See also:
XmlNameTable

Return to top


Overridden Property: NodeType (read-only)
Summary
Gets the type of the current node.
C# Syntax:
public override XmlNodeType NodeType {get;}
Example
The following example reads an XML and displays each of the nodes.
using System;
using System.IO;
using System.Xml;

public class Sample
{
  private const String filename = "items.xml";

  public static void Main()
  {
    XmlNodeReader reader = null;

    try
    {           
        //Create an XmlNodeReader to read the XmlDocument.
        XmlDocument doc = new XmlDocument();
        doc.Load(filename);
        reader = new XmlNodeReader(doc);

        //Parse the file and display each of the nodes.
        while (reader.Read())
        {
           switch (reader.NodeType)
           {
             case XmlNodeType.Element:
               Console.Write("<{0}>", reader.Name);
               break;
             case XmlNodeType.Text:
               Console.Write(reader.Value);
               break;
             case XmlNodeType.CDATA:
               Console.Write(reader.Value);
               break;
             case XmlNodeType.ProcessingInstruction:
               Console.Write("<?{0} {1}?>", reader.Name, reader.Value);
               break;
             case XmlNodeType.Comment:
               Console.Write("<!--{0}-->", reader.Value);
               break;
             case XmlNodeType.XmlDeclaration:
               Console.Write("<?xml version='1.0'?>");
               break;
             case XmlNodeType.Document:
               break;
             case XmlNodeType.EndElement:
               Console.Write("</{0}>", reader.Name);
               break;
           }       
          }           
        }

     finally
     {
       if (reader!=null)
         reader.Close();
     }
  }
} // End class

    
The example uses the file, items.xml, as input.

<?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 a char entity: &#65;</Item>
  <!-- Fourteen chars in this element.-->
  <Item>1234567890ABCD</Item>
</Items>

    

Return to top


Overridden Property: Prefix (read-only)
Summary
Gets the namespace prefix associated with the current node.
C# Syntax:
public override string Prefix {get;}
Example
The following example displays the local name of each node, and, if they exist, the prefix and namespace URI.
using System;
using System.IO;
using System.Xml;

public class Sample 
{
  public static void Main()
  {
    XmlNodeReader reader = null;

    try
    {
       //Create and load the XML document.
       XmlDocument doc = new XmlDocument();
       doc.LoadXml("<book xmlns:bk='urn:samples'> " +
                   "<title>Pride And Prejudice</title>" +
                   "<bk:genre>novel</bk:genre>" +
                   "</book>"); 

       //Load the XmlNodeReader 
       reader = new XmlNodeReader(doc);
  
       //Parse the XML.  If they exist, display the prefix and  
       //namespace URI of each node.
       while (reader.Read()){
         if (reader.IsStartElement()){
           if (reader.Prefix==String.Empty)
              Console.WriteLine("<{0}>", reader.LocalName);
           else{
               Console.Write("<{0}:{1}>", reader.Prefix, reader.LocalName);
               Console.WriteLine(" The namespace URI is " + reader.NamespaceURI);
           }
         }
       }
       
     } 
     finally 
     {
        if (reader != null)
          reader.Close();
      }
  }
  
} // End class

    

Return to top


Overridden Property: QuoteChar (read-only)
Summary
Gets the quotation mark character used to enclose the value of an attribute node.
C# Syntax:
public override char QuoteChar {get;}

Return to top


Overridden Property: ReadState (read-only)
Summary
Gets the state of the reader.
C# Syntax:
public override ReadState ReadState {get;}

Return to top


Overridden Property: Value (read-only)
Summary
Gets the text value of the current node.
C# Syntax:
public override string Value {get;}
Example
The following example reads an XML and displays each node.
using System;
using System.IO;
using System.Xml;

public class Sample
{
  private const String filename = "items.xml";

  public static void Main()
  {
    XmlNodeReader reader = null;

    try
    {           
        //Create an XmlNodeReader to read the XmlDocument.
        XmlDocument doc = new XmlDocument();
        doc.Load(filename);
        reader = new XmlNodeReader(doc);

        //Parse the file and display each of the nodes.
        while (reader.Read())
        {
           switch (reader.NodeType)
           {
             case XmlNodeType.Element:
               Console.Write("<{0}>", reader.Name);
               break;
             case XmlNodeType.Text:
               Console.Write(reader.Value);
               break;
             case XmlNodeType.CDATA:
               Console.Write(reader.Value);
               break;
             case XmlNodeType.ProcessingInstruction:
               Console.Write("<?{0} {1}?>", reader.Name, reader.Value);
               break;
             case XmlNodeType.Comment:
               Console.Write("<!--{0}-->", reader.Value);
               break;
             case XmlNodeType.XmlDeclaration:
               Console.Write("<?xml version='1.0'?>");
               break;
             case XmlNodeType.Document:
               break;
             case XmlNodeType.EndElement:
               Console.Write("</{0}>", reader.Name);
               break;
           }       
          }           
        }

     finally
     {
       if (reader!=null)
         reader.Close();
     }
  }
} // End class

    
The example uses the file, items.xml, as input.

<?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 a char entity: &#65;</Item>
  <!-- Fourteen chars in this element.-->
  <Item>1234567890ABCD</Item>
</Items>

    

Return to top


Overridden Property: XmlLang (read-only)
Summary
Gets the current xml:lang scope.
C# Syntax:
public override string XmlLang {get;}
Remarks
This property represents the xml:lang scope within which the current node resides. For example, here is an XML fragment with xml:lang set to US English in the root element:

<root xml:lang="en-us">

<name>Fred</name>

</root>

When the reader is positioned on the name element, you can use this property to find that it is in the scope of a US English xml:lang attribute.

The string returned is also in XmlNodeReader.NameTable.

Return to top


Overridden Property: XmlSpace (read-only)
Summary
Gets the current xml:space scope.
C# Syntax:
public override XmlSpace XmlSpace {get;}

Return to top


Overridden Method: Close()
Summary
Changes the XmlNodeReader.ReadState to Closed.
C# Syntax:
public override void Close();
Remarks
This method also releases any resources held while reading. If Close has already been called, no action is performed.
Example
The following example parses a file and closes the reader.
using System;
using System.IO;
using System.Xml;

public class Sample
{
  private const String filename = "items.xml";

  public static void Main()
  {
    XmlNodeReader reader = null;

    try
    {           
        //Create an XmlNodeReader to read the XmlDocument.
        XmlDocument doc = new XmlDocument();
        doc.Load(filename);
        reader = new XmlNodeReader(doc);

        //Parse the file and display each of the nodes.
        while (reader.Read())
        {
           switch (reader.NodeType)
           {
             case XmlNodeType.Element:
               Console.Write("<{0}>", reader.Name);
               break;
             case XmlNodeType.Text:
               Console.Write(reader.Value);
               break;
             case XmlNodeType.CDATA:
               Console.Write(reader.Value);
               break;
             case XmlNodeType.ProcessingInstruction:
               Console.Write("<?{0} {1}?>", reader.Name, reader.Value);
               break;
             case XmlNodeType.Comment:
               Console.Write("<!--{0}-->", reader.Value);
               break;
             case XmlNodeType.XmlDeclaration:
               Console.Write("<?xml version='1.0'?>");
               break;
             case XmlNodeType.Document:
               break;
             case XmlNodeType.EndElement:
               Console.Write("</{0}>", reader.Name);
               break;
           }       
          }           
        }

     finally
     {
       if (reader!=null)
         reader.Close();
     }
  }
} // End class

    
The example uses the file, items.xml, as input.

<?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 a char entity: &#65;</Item>
  <!-- Fourteen chars in this element.-->
  <Item>1234567890ABCD</Item>
</Items>

    

Return to top


Method: Equals(
   object obj
)
Inherited
See base class member description: System.Object.Equals
C# Syntax:
public virtual bool Equals(
   object obj
);

For more information on members inherited from System.Object click on the link above.

Return to top


Method: Finalize()
Inherited
See base class member description: System.Object.Finalize
C# Syntax:
~XmlNodeReader();

For more information on members inherited from System.Object click on the link above.

Return to top


Overloaded Method: GetAttribute(
   int attributeIndex
)
Summary
Gets the value of the attribute with the specified index.
C# Syntax:
public override string GetAttribute(
   int attributeIndex
);
Parameters:

attributeIndex

The index of the attribute. The index is zero-based. (The first attribute has index 0.)

Return Value:
The value of the specified attribute.
Exceptions
Exception Type Condition
ArgumentOutOfRangeException The i parameter is less than 0 or greater than or equal to XmlNodeReader.AttributeCount.
Remarks
This method does not move the reader.

Return to top


Overloaded Method: GetAttribute(
   string name
)
Summary
Gets the value of the attribute with the specified name.
C# Syntax:
public override string GetAttribute(
   string name
);
Parameters:

name

The qualified name of the attribute.

Return Value:
The value of the specified attribute. If the attribute is not found, String.Empty is returned.
Remarks
This method does not move the reader.

If the reader is positioned on a DocumentType node, this method can be used to get the PUBLIC and SYSTEM literals, for example, reader.GetAttribute("PUBLIC")

Example
The following example gets the value of the ISBN attribute.
using System;
using System.IO;
using System.Xml;

public class Sample 
{
  public static void Main()
  {
    XmlNodeReader reader = null;

    try
    {
       //Create and load the XML document.
       XmlDocument doc = new XmlDocument();
       doc.LoadXml("<book genre='novel' ISBN='1-861003-78' publicationdate='1987'> " +
                   "</book>"); 

       // Load the XmlNodeReader 
       reader = new XmlNodeReader(doc);
  
       //Read the ISBN attribute.
       reader.MoveToContent();
       string isbn = reader.GetAttribute("ISBN");
       Console.WriteLine("The ISBN value: " + isbn);

     } 

     finally 
     {
        if (reader != null)
          reader.Close();
      }
  }
  
} // End class

    

Return to top


Overloaded Method: GetAttribute(
   string name,
   string namespaceURI
)
Summary
Gets the value of the attribute with the specified local name and namespace URI.
C# Syntax:
public override string GetAttribute(
   string name,
   string namespaceURI
);
Parameters:

name

The local name of the attribute.

namespaceURI

The namespace URI of the attribute.

Return Value:
The value of the specified attribute. If the attribute is not found, String.Empty is returned.
Remarks
The following XML contains an attribute in a specific namespace:

<test xmlns:dt="urn:datatypes" dt:type="int"/>

You can lookup the dt:type attribute using one argument (prefix and local name) or two arguments (local name and namespace URI):

String dt = reader.GetAttribute("dt:type");

String dt2 = reader.GetAttribute("type","urn:datatypes");

To lookup the xmlns:dt attribute, use one of the following arguments:

String dt3 = reader.GetAttribute("xmlns:dt");

String dt4 = reader.GetAttribute("dt",http://www.w3.org/2000/xmlns/);

You can also get this information using the XmlNodeReader.Prefix property.

Return to top


Method: GetHashCode()
Inherited
See base class member description: System.Object.GetHashCode
C# Syntax:
public virtual int GetHashCode();

For more information on members inherited from System.Object click on the link above.

Return to top


Method: GetType()
Inherited
See base class member description: System.Object.GetType
C# Syntax:
public Type GetType();

For more information on members inherited from System.Object click on the link above.

Return to top


Overloaded Method: IsStartElement()
Inherited
See base class member description: System.Xml.XmlReader.IsStartElement

Summary
Calls XmlReader.MoveToContent and tests if the current content node is a start tag or empty element tag.
C# Syntax:
public virtual bool IsStartElement();
Return Value:
true if MoveToContent finds a start tag or empty element tag; false if a node type other than XmlNodeType.Element was found.
Exceptions
Exception Type Condition
XmlException Incorrect XML is encountered in the input stream.
Remarks
This method skips white space, comments, and processing instructions until the reader is positioned on a content node. The method then tests if the current node is an element.
Example
The following example displays the text content of each element.
using System;
using System.IO;
using System.Xml;

public class Sample 
{
  public static void Main()
  {
    XmlTextReader reader = null;

    try
    {
       //Load the reader with the XML file.
       reader = new XmlTextReader("elems.xml");
  
       //Parse the XML and display the text content of each of the elements.
       while (reader.Read()){
         if (reader.IsStartElement()){
           if (reader.IsEmptyElement)
              Console.WriteLine("<{0}/>", reader.Name);
           else{
               Console.Write("<{0}> ", reader.Name);
               reader.Read(); //Read the start tag.
               if (reader.IsStartElement())  //Handle nested elements.
                 Console.Write("\r\n<{0}>", reader.Name);
               Console.WriteLine(reader.ReadString());  //Read the text content of the element.
           }
         }
       } 
       
     } 

     finally 
     {
        if (reader != null)
          reader.Close();
      }
  }
  
} // End class

    
The example uses the file, elems.xml, as input.

<book>
  <title>Pride And Prejudice</title>
  <price>19.95</price>
  <misc/>
</book>

    
See also:
XmlReader.MoveToContent

Return to top


Overloaded Method: IsStartElement(
   string name
)
Inherited
See base class member description: System.Xml.XmlReader.IsStartElement

Summary
Calls XmlReader.MoveToContent and tests if the current content node is a start tag or empty element tag and if the XmlReader.Name property of the element found matches the given argument.
C# Syntax:
public virtual bool IsStartElement(
   string name
);
Parameters:

name

The string matched against the Name property of the element found.

Return Value:
true if the resulting node is an element and the Name property matches the specified string.false if a node type other than XmlNodeType.Element was found or if the element Name property does not match the specified string.
Exceptions
Exception Type Condition
XmlException Incorrect XML is encountered in the input stream.
Remarks
This method skips white space, comments, and processing instructions until the reader is positioned on a content node. The method then tests if the current node is an element.
See also:
XmlReader.MoveToContent

Return to top


Overloaded Method: IsStartElement(
   string localname,
   string ns
)
Inherited
See base class member description: System.Xml.XmlReader.IsStartElement

Summary
Calls XmlReader.MoveToContent and tests if the current content node is a start tag or empty element tag and if the XmlReader.LocalName and XmlReader.NamespaceURI properties of the element found match the given strings.
C# Syntax:
public virtual bool IsStartElement(
   string localname,
   string ns
);
Parameters:

localname

The string to match against the LocalName property of the element found.

ns

The string to match against the NamespaceURI property of the element found.

Return Value:
true if the resulting node is an element.false if a node type other than XmlNodeType.Element was found or if the LocalName and NamespaceURI properties of the element do not match the specified strings.
Exceptions
Exception Type Condition
XmlException Incorrect XML is encountered in the input stream.
Remarks
This method skips white space, comments, and processing instructions until the reader is positioned on a content node. The method then tests if the current node is an element.
See also:
XmlReader.MoveToContent

Return to top


Overridden Method: LookupNamespace(
   string prefix
)
Summary
Resolves a namespace prefix in the current element's scope.
C# Syntax:
public override string LookupNamespace(
   string prefix
);
Parameters:

prefix

The prefix whose namespace URI you want to resolve. To match the default namespace, pass an empty string. This string does not have to be atomized.

Return Value:
The namespace URI to which the prefix maps or null if no matching prefix is found.
Remarks
              <root xmlns:a="urn:456">
               <item>
               <ref href="a:b"/>
               </item>
              </root>
               
            
In the preceding XML, if the reader is positioned on the href attribute, the prefix a is resolved by calling reader.LookupNamesapce("a") . The returned string is urn:456 .

Return to top


Method: MemberwiseClone()
Inherited
See base class member description: System.Object.MemberwiseClone
C# Syntax:
protected object MemberwiseClone();

For more information on members inherited from System.Object click on the link above.

Return to top


Overloaded Method: MoveToAttribute(
   int attributeIndex
)
Summary
Moves to the attribute with the specified index.
C# Syntax:
public override void MoveToAttribute(
   int attributeIndex
);
Parameters:

attributeIndex

The index of the attribute.

Exceptions
Exception Type Condition
ArgumentOutOfRangeException The i parameter is less than 0 or greater than or equal to XmlReader.AttributeCount.
Example
The following example reads all the attributes on the root node.
using System;
using System.IO;
using System.Xml;

public class Sample 
{
  public static void Main()
  {
    XmlNodeReader reader = null;

    try
    {
       //Create and load the XML document.
       XmlDocument doc = new XmlDocument();
       doc.LoadXml("<book genre='novel' ISBN='1-861003-78' publicationdate='1987'> " +
                   "</book>"); 

       //Load the XmlNodeReader 
       reader = new XmlNodeReader(doc);
  
       //Read the attributes on the root element.
       reader.MoveToContent();
       if (reader.HasAttributes){
         for (int i=0; i<reader.AttributeCount; i++){
            reader.MoveToAttribute(i);
            Console.WriteLine("{0} = {1}", reader.Name, reader.Value);
         }
         //Return the reader to the book element.
         reader.MoveToElement();
       }

     } 

     finally 
     {
        if (reader != null)
          reader.Close();
      }
  }
  
} // End class

    

Return to top


Overloaded Method: MoveToAttribute(
   string name
)
Summary
Moves to the attribute with the specified name.
C# Syntax:
public override bool MoveToAttribute(
   string name
);
Parameters:

name

The qualified name of the attribute.

Return Value:
true if the attribute is found; otherwise, false. If false, the reader's position does not change.
Remarks
After calling this method, the XmlNodeReader.Name, XmlNodeReader.NamespaceURI, and XmlNodeReader.Prefix properties reflect the properties of that attribute.

Return to top


Overloaded Method: MoveToAttribute(
   string name,
   string namespaceURI
)
Summary
Moves to the attribute with the specified local name and namespace URI.
C# Syntax:
public override bool MoveToAttribute(
   string name,
   string namespaceURI
);
Parameters:

name

The local name of the attribute.

namespaceURI

The namespace URI of the attribute.

Return Value:
true if the attribute is found; otherwise, false. If false, the reader's position does not change.
Remarks
After calling this method, the XmlNodeReader.Name, XmlNodeReader.NamespaceURI, and XmlNodeReader.Prefix properties reflect the properties of that attribute.

Return to top


Method: MoveToContent()
Inherited
See base class member description: System.Xml.XmlReader.MoveToContent

Summary
Checks whether the current node is a content (non-white space text, CDATA, Element, EndElement, EntityReference, or EndEntity) node. If the node is not a content node, the reader skips ahead to the next content node or end of file. It skips over nodes of the following type: ProcessingInstruction, DocumentType, Comment, Whitespace, or SignificantWhitespace.
C# Syntax:
public virtual XmlNodeType MoveToContent();
Return Value:
The XmlReader.NodeType of the current node found by the method or XmlNodeType.None if the reader has reached the end of the input stream.
Exceptions
Exception Type Condition
XmlException Incorrect XML encountered in the input stream.
Remarks
If the current node is an attribute node, this method moves the reader back to the element that owns the attribute.
Example
This is useful when you want to write code that can skip over random XML markup without breaking. For example, suppose you have the following code:
if (reader.MoveToContent() == XmlNodeType.Element && reader.Name == "price") 
 {
    _price = reader.ReadString();
 }

    

This code can handle the following inputs without breaking:

<price>123.4</price>

and

<?xml version="1.0"><!DOCTYPE price SYSTEM "abc"><price>123.4</price>

and

<?xml version="1.0"><!DOCTYPE price SYSTEM "abc" [<!ENTTIY p "123.4">]><price>&p;</price>

and

<!-- some test comment --><?processing instruction?><price>123.4</price>

Return to top


Overridden Method: MoveToElement()
Summary
Moves to the element that contains the current attribute node.
C# Syntax:
public override bool MoveToElement();
Return Value:
true if the reader is positioned on an attribute (the reader moves to the element that owns the attribute); false if the reader is not positioned on an attribute (the position of the reader does not change).
Remarks
Use this method to return to an element after navigating through its attributes. This method moves the reader to one of the following node types: Element, DocumentType, or XmlDeclaration.
Example
The following example reads all the attributes on the root node.
using System;
using System.IO;
using System.Xml;

public class Sample 
{
  public static void Main()
  {
    XmlNodeReader reader = null;

    try
    {
       //Create and load the XML document.
       XmlDocument doc = new XmlDocument();
       doc.LoadXml("<book genre='novel' ISBN='1-861003-78' publicationdate='1987'> " +
                   "</book>"); 

       //Load the XmlNodeReader 
       reader = new XmlNodeReader(doc);
  
       //Read the attributes on the root element.
       reader.MoveToContent();
       if (reader.HasAttributes){
         for (int i=0; i<reader.AttributeCount; i++){
            reader.MoveToAttribute(i);
            Console.WriteLine("{0} = {1}", reader.Name, reader.Value);
         }
         //Return the reader to the book element.
         reader.MoveToElement();
       }

     } 

     finally 
     {
        if (reader != null)
          reader.Close();
      }
  }
  
} // End class

    

Return to top


Overridden Method: MoveToFirstAttribute()
Summary
Moves to the first attribute.
C# Syntax:
public override bool MoveToFirstAttribute();
Return Value:
true if an attribute exists (the reader moves to the first attribute); otherwise, false (the position of the reader does not change).
Example
The following example gets the value of the first attribute in the.
using System;
using System.IO;
using System.Xml;

public class Sample 
{
  public static void Main()
  {
    XmlNodeReader reader = null;

    try
    {
       //Create and load the XML document.
       XmlDocument doc = new XmlDocument();
       doc.LoadXml("<book genre='novel' ISBN='1-861003-78' publicationdate='1987'> " +
                   "</book>"); 

       //Load the XmlNodeReader 
       reader = new XmlNodeReader(doc);
  
       //Read the genre attribute.
       reader.MoveToContent();
       reader.MoveToFirstAttribute();
       string genre=reader.Value;
       Console.WriteLine("The genre value: " + genre);

     } 
     finally 
     {
        if (reader != null)
          reader.Close();
      }
  }
  
} // End class

    

Return to top


Overridden Method: MoveToNextAttribute()
Summary
Moves to the next attribute.
C# Syntax:
public override bool MoveToNextAttribute();
Return Value:
true if there is a next attribute; false if there are no more attributes.
Remarks
If the current node is not an attribute node, this method is equivalent to XmlNodeReader.MoveToFirstAttribute. If MoveToNextAttribute returns true, the reader moves to the next attribute; otherwise, the position of the reader does not change.
Example
The following example reads a book.
using System;
using System.IO;
using System.Xml;

public class Sample 
{
  public static void Main()
  {
    XmlNodeReader reader = null;

    try
    {
       //Create and load the XML document.
       XmlDocument doc = new XmlDocument();
       doc.LoadXml("<book genre='novel' ISBN='1-861003-78'> " +
                   "<title>Pride And Prejudice</title>" +
                   "<price>19.95</price>" +
                   "</book>"); 

       //Load the XmlNodeReader 
       reader = new XmlNodeReader(doc);
  
       //Read the attributes on the book element.
       reader.MoveToContent();
       while (reader.MoveToNextAttribute())
       {
         Console.WriteLine("{0} = {1}", reader.Name, reader.Value);
       }

       //Move the reader to the title element.
       reader.Read();

       //Read the title and price elements.
       Console.WriteLine(reader.ReadElementString());
       Console.WriteLine(reader.ReadElementString());

     } 

     finally 
     {
        if (reader != null)
          reader.Close();
      }
  }
} // End class

    

Return to top


Overridden Method: Read()
Summary
Reads the next node from the stream.
C# Syntax:
public override bool Read();
Return Value:
true if the next node was read successfully; false if there are no more nodes to read.
Remarks
When a reader is first created and initialized, there is no information available. You must call Read to read the first node.
Example
The following example reads an XML and displays each node.
using System;
using System.IO;
using System.Xml;

public class Sample
{
  private const String filename = "items.xml";

  public static void Main()
  {
    XmlNodeReader reader = null;

    try
    {           
        //Create an XmlNodeReader to read the XmlDocument.
        XmlDocument doc = new XmlDocument();
        doc.Load(filename);
        reader = new XmlNodeReader(doc);

        //Parse the file and display each of the nodes.
        while (reader.Read())
        {
           switch (reader.NodeType)
           {
             case XmlNodeType.Element:
               Console.Write("<{0}>", reader.Name);
               break;
             case XmlNodeType.Text:
               Console.Write(reader.Value);
               break;
             case XmlNodeType.CDATA:
               Console.Write(reader.Value);
               break;
             case XmlNodeType.ProcessingInstruction:
               Console.Write("<?{0} {1}?>", reader.Name, reader.Value);
               break;
             case XmlNodeType.Comment:
               Console.Write("<!--{0}-->", reader.Value);
               break;
             case XmlNodeType.XmlDeclaration:
               Console.Write("<?xml version='1.0'?>");
               break;
             case XmlNodeType.Document:
               break;
             case XmlNodeType.EndElement:
               Console.Write("</{0}>", reader.Name);
               break;
           }       
          }           
        }

     finally
     {
       if (reader!=null)
         reader.Close();
     }
  }
} // End class

    
The example uses the file, items.xml, as input.

<?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 a char entity: &#65;</Item>
  <!-- Fourteen chars in this element.-->
  <Item>1234567890ABCD</Item>
</Items>

    

Return to top


Overridden Method: ReadAttributeValue()
Summary
Parses the attribute value into one or more Text, EntityReference, or EndEntity nodes.
C# Syntax:
public override bool ReadAttributeValue();
Return Value:
true if there are nodes to return.

false if the reader is not positioned on an attribute node when the initial call is made or if all the attribute values have been read.

An empty attribute, such as, misc="" , returns true with a single node with a value of String.Empty.

Remarks
Use this method after calling XmlNodeReader.MoveToAttribute to read through the text or entity reference nodes that make up the attribute value. The XmlNodeReader.Depth of the attribute value nodes is one plus the depth of the attribute node; it increments and decrements by one when you step into and out of general entity references.
Example
The following example reads an attribute with text and entity reference nodes.
using System;
using System.IO;
using System.Xml;

public class Sample 
{
  public static void Main()
  {
    XmlNodeReader reader = null;

    try
    {
       //Create and load an XML document.
       XmlDocument doc = new XmlDocument();
       doc.LoadXml("<!DOCTYPE book [<!ENTITY h 'harcover'>]>" +
                   "<book genre='novel' misc='sale-item &h; 1987'>" +
                   "</book>");
        
       //Create the reader. 
       reader = new XmlNodeReader(doc);

       //Read the misc attribute. The attribute is parsed into multiple 
       //text and entity reference nodes.
       reader.MoveToContent();
       reader.MoveToAttribute("misc");
       while (reader.ReadAttributeValue()){
          if (reader.NodeType==XmlNodeType.EntityReference)
            //To expand the entity, call ResolveEntity.
            Console.WriteLine("{0} {1}", reader.NodeType, reader.Name);
          else
             Console.WriteLine("{0} {1}", reader.NodeType, reader.Value);
        } 
     } 
     finally 
     {
        if (reader != null)
          reader.Close();
      }
  }
} // End class

    

Return to top


Overloaded Method: ReadElementString()
Inherited
See base class member description: System.Xml.XmlReader.ReadElementString

Summary
Reads a text-only element.
C# Syntax:
public virtual string ReadElementString();
Return Value:
The text contained in the element that was read. An empty string if the element is empty ( <item></item> or <item/> ).
Exceptions
Exception Type Condition
XmlException The next content node is not a start tag; or the element found does not contain a simple text value.
Remarks
This is a helper method for reading simple text-only elements. It calls XmlReader.MoveToContent to find the next content node and then parses its value as a simple string.

Using the XML, <name>Arlene Huff</name> , ReadElementString consumes the element and returns the string Arlene Huff.

This method cannot handle any markup (child elements, comments, processing instructions, and so on) inside the name element, but it can concatenate multiple adjacent text and CDATA blocks.

Example
The following example uses ReadElementString to read the contents of the element nodes.
using System;
using System.IO;
using System.Xml;

//Reads an XML fragment

public class Sample
{
  private const String filename = "book.xml";

  public static void Main()
  {
    XmlTextReader reader = null;

    try
    {           
      //Load the file and ignore all whitespace.
      reader = new XmlTextReader(filename);
      reader.WhitespaceHandling = WhitespaceHandling.None;

      //Moves the reader to the root element.
      reader.MoveToContent();

      //Read the title and price elements.
      Console.WriteLine("Content of the title element: {0}", reader.ReadElementString());
      Console.WriteLine("Content of the price element: {0}", reader.ReadElementString());; 
         
    }
    finally
    {
      if (reader!=null)
        reader.Close();
    }
  }
} // End class

    
The example uses the data file book.xml:

<!--sample XML fragment-->
<book genre='novel' ISBN='1-861003-78' misc='sale-item'>
  <title>The Handmaid's Tale</title>
  <price>14.95</price>
</book>

    

Return to top


Overloaded Method: ReadElementString(
   string name
)
Inherited
See base class member description: System.Xml.XmlReader.ReadElementString

Summary
Checks that the XmlReader.Name property of the element found matches the given string before reading a text-only element.
C# Syntax:
public virtual string ReadElementString(
   string name
);
Parameters:

name

The name to check.

Return Value:
The text contained in the element that was read. An empty string if the element is empty ( <item></item> or <item/> ).
Exceptions
Exception Type Condition
XmlException If the next content node is not a start tag; if the element Name does not match the given argument; or if the element found does not contain a simple text value.
Remarks
This is a helper method for reading simple text-only elements. It calls XmlReader.MoveToContent to find the next content node and then parses its value as a simple string.

Using the XML, <name>Arlene Huff</name> , ReadElementString consumes the element and returns the string Arlene Huff.

This method cannot handle any markup (child elements, comments, processing instructions, and so on) inside the name element, but it can concatenate multiple adjacent text and CDATA blocks.

Return to top


Overloaded Method: ReadElementString(
   string localname,
   string ns
)
Inherited
See base class member description: System.Xml.XmlReader.ReadElementString

Summary
Checks that the XmlReader.LocalName and XmlReader.NamespaceURI properties of the element found matches the given strings before reading a text-only element.
C# Syntax:
public virtual string ReadElementString(
   string localname,
   string ns
);
Parameters:

localname

The local name to check.

ns

The namespace URI to check.

Return Value:
The text contained in the element that was read. An empty string if the element is empty ( <item></item> or <item/> ).
Exceptions
Exception Type Condition
XmlException If the next content node is not a start tag; if the element LocalName or NamespaceURI do not match the given arguments; or if the element found does not contain a simple text value.
Remarks
This is a helper method for reading simple text-only elements. It calls XmlReader.MoveToContent to find the next content node and then parses its value as a simple string.

Using the XML, <name>Arlene Huff</name> , ReadElementString consumes the element and returns the string Arlene Huff.

This method cannot handle any markup (child elements, comments, processing instructions, and so on) inside the name element, but it can concatenate multiple adjacent text and CDATA blocks.

Return to top


Method: ReadEndElement()
Inherited
See base class member description: System.Xml.XmlReader.ReadEndElement

Summary
Checks that the current content node is an end tag and advances the reader to the next node.
C# Syntax:
public virtual void ReadEndElement();
Exceptions
Exception Type Condition
XmlException The current node is not an end tag or if incorrect XML is encountered in the input stream.
Example
The following example reads an XML document using the XmlReader.ReadStartElement and ReadEndElement methods.
using System;
using System.IO;
using System.Xml;

public class Sample 
{
  public static void Main()
  {

     //Create the reader.
     XmlTextReader  reader = new XmlTextReader("book3.xml");

     //Parse the XML document.  ReadString is used to 
     //read the text content of the elements.
     reader.Read(); 
     reader.ReadStartElement("book");  
     reader.ReadStartElement("title");   
     Console.Write("The content of the title element:  ");
     Console.WriteLine(reader.ReadString());
     reader.ReadEndElement();
     reader.ReadStartElement("price");
     Console.Write("The content of the price element:  ");
     Console.WriteLine(reader.ReadString());
     reader.ReadEndElement();
     reader.ReadEndElement();

     //Close the reader.
     reader.Close();
     
  }
} // End class

    
The example uses the file, book3.xml, as input.
<book>
  <title>Pride And Prejudice</title>
  <price>19.95</price>
</book>

    
See also:
XmlReader.ReadStartElement

Return to top


Overridden Method: ReadInnerXml()
Summary
Reads all the content, including markup, as a string.
C# Syntax:
public override string ReadInnerXml();
Return Value:
All the XML content, including markup, in the current node. If the current node has no children, an empty string is returned.

If the current node is neither an element nor attribute, an empty string is returned.

Remarks
This method returns all the content of the current node including the markup. The current node (start tag) and corresponding end node (end tag) are not returned. For example, if you had the following:
              <node>
               this <child id="123"/>
              </node>
               
            

ReadInnerXml returns this <child id="123"/>

This method handles element and attribute nodes in the following way:



Node Type Child Content Return Value Position After the Call
Element <item>text</item> text After the end tag.
Attribute <item attr1="val1" attr2="val2">text</item> val1 Remains on the attribute node attr1 .

If the reader is positioned on a leaf node, calling ReadInnerXml is equivalent to calling XmlNodeReader.Read.

This method also checks for well-formed XML.

Example
The following example compares the ReadInnerXml and XmlNodeReader.ReadOuterXml methods.
using System;
using System.IO;
using System.Xml;

//Reads an XML fragment

public class Sample
{
  private const String filename = "2books.xml";

  public static void Main()
  {
    XmlNodeReader reader = null;

    try
    {
       XmlDocument doc = new XmlDocument();
       doc.Load(filename);

       reader = new XmlNodeReader(doc);

       //Moves the reader to the root element.
       reader.MoveToContent();

       //Moves the reader to the book node.
       reader.Read(); 

       //Note that ReadInnerXml only returns the markup of the node's children
       //so the book's attributes are not returned.
       Console.WriteLine("Read the first book using ReadInnerXml...");
       Console.WriteLine(reader.ReadInnerXml());

       //ReadOuterXml returns the markup for the current node and its children
       //so the book's attributes are also returned.
       Console.WriteLine("\r\nRead the second book using ReadOuterXml...");
       Console.WriteLine(reader.ReadOuterXml());                    

    }
    finally
    {
      if (reader!=null)
        reader.Close();
    }
  }
} // End class

    
The example uses the file, 2books.xml, as input.

<!--sample XML fragment-->
<bookstore>
  <book genre='novel' ISBN='10-861003-324'>
    <title>The Handmaid's Tale</title>
    <price>19.95</price>
  </book>
  <book genre='novel' ISBN='1-861001-57-5'>
    <title>Pride And Prejudice</title>
    <price>24.95</price>
  </book>
</bookstore>

    

Return to top


Overridden Method: ReadOuterXml()
Summary
Reads the content, including markup, representing this node and all its children.
C# Syntax:
public override string ReadOuterXml();
Return Value:
If the reader is positioned on an element or an attribute node, this method returns all the XML content, including markup, of the current node and all its children; otherwise, it returns an empty string.
Remarks
This method is similar to XmlNodeReader.ReadInnerXml except it also returns the start and end tags.

This method handles element and attribute nodes in the following manner:



Node Type Child Content Return Value Position After the Call
Element <item>text</item> <item>text</item> After the end tag.
Attribute <item attr1="val1" attr2="val2">text</item> attr="val1" Remains on the attribute node attr1 .

If the reader is positioned on a leaf node, calling ReadOuterXml is equivalent to calling XmlNodeReader.Read.

This method also checks for well-formed XML.

Example
The following example compares the XmlNodeReader.ReadInnerXml and ReadOuterXml methods.
using System;
using System.IO;
using System.Xml;

//Reads an XML fragment

public class Sample
{
  private const String filename = "2books.xml";

  public static void Main()
  {
    XmlNodeReader reader = null;

    try
    {
       XmlDocument doc = new XmlDocument();
       doc.Load(filename);

       reader = new XmlNodeReader(doc);

       //Moves the reader to the root element.
       reader.MoveToContent();

       //Moves the reader to the book node.
       reader.Read(); 

       //Note that ReadInnerXml only returns the markup of the node's children
       //so the book's attributes are not returned.
       Console.WriteLine("Read the first book using ReadInnerXml...");
       Console.WriteLine(reader.ReadInnerXml());

       //ReadOuterXml returns the markup for the current node and its children
       //so the book's attributes are also returned.
       Console.WriteLine("\r\nRead the second book using ReadOuterXml...");
       Console.WriteLine(reader.ReadOuterXml());                    

    }
    finally
    {
      if (reader!=null)
        reader.Close();
    }
  }
} // End class

    
The example uses the file, 2books.xml, as input.

<!--sample XML fragment-->
<bookstore>
  <book genre='novel' ISBN='10-861003-324'>
    <title>The Handmaid's Tale</title>
    <price>19.95</price>
  </book>
  <book genre='novel' ISBN='1-861001-57-5'>
    <title>Pride And Prejudice</title>
    <price>24.95</price>
  </book>
</bookstore>

    

Return to top


Overloaded Method: ReadStartElement()
Inherited
See base class member description: System.Xml.XmlReader.ReadStartElement

Summary
Checks that the current node is an element and advances the reader to the next node.
C# Syntax:
public virtual void ReadStartElement();
Exceptions
Exception Type Condition
XmlException XmlReader.IsStartElement returns false.
Remarks
This method calls XmlReader.IsStartElement followed by XmlReader.Read to position you on the content of that element found in the input stream.
See also:
XmlReader.ReadEndElement

Return to top


Overloaded Method: ReadStartElement(
   string name
)
Inherited
See base class member description: System.Xml.XmlReader.ReadStartElement

Summary
Checks that the current content node is an element with the given XmlReader.Name and advances the reader to the next node.
C# Syntax:
public virtual void ReadStartElement(
   string name
);
Parameters:

name

The qualified name of the element.

Exceptions
Exception Type Condition
XmlException XmlReader.IsStartElement returns false or if the XmlReader.Name of the element does not match the given name.
Remarks
A call to this method corresponds to a call to XmlReader.IsStartElement followed by a call to XmlReader.Read.
Example
The following example parses an XML document using the ReadStartElement and XmlReader.ReadEndElement methods.
using System;
using System.IO;
using System.Xml;

public class Sample 
{
  public static void Main()
  {

     //Create the reader.
     XmlTextReader  reader = new XmlTextReader("book3.xml");

     //Parse the XML document.  ReadString is used to 
     //read the text content of the elements.
     reader.Read(); 
     reader.ReadStartElement("book");  
     reader.ReadStartElement("title");   
     Console.Write("The content of the title element:  ");
     Console.WriteLine(reader.ReadString());
     reader.ReadEndElement();
     reader.ReadStartElement("price");
     Console.Write("The content of the price element:  ");
     Console.WriteLine(reader.ReadString());
     reader.ReadEndElement();
     reader.ReadEndElement();

     //Close the reader.
     reader.Close();
     
  }
} // End class

    
The example uses the file, book3.xml, as input.
<book>
  <title>Pride And Prejudice</title>
  <price>19.95</price>
</book>

    
See also:
XmlReader.ReadEndElement

Return to top


Overloaded Method: ReadStartElement(
   string localname,
   string ns
)
Inherited
See base class member description: System.Xml.XmlReader.ReadStartElement

Summary
Checks that the current content node is an element with the given XmlReader.LocalName and XmlReader.NamespaceURI and advances the reader to the next node.
C# Syntax:
public virtual void ReadStartElement(
   string localname,
   string ns
);
Parameters:

localname

The local name of the element.

ns

The namespace URI of the element.

Exceptions
Exception Type Condition
XmlException XmlReader.IsStartElement returns false, or the XmlReader.LocalName and XmlReader.NamespaceURI properties of the element found do not match the given arguments.
Remarks
A call to this method corresponds to a call to XmlReader.IsStartElement followed by a call to XmlReader.Read.
See also:
XmlReader.ReadEndElement

Return to top


Overridden Method: ReadString()
Summary
Reads the contents of an element or text node as a string.
C# Syntax:
public override string ReadString();
Return Value:
The contents of the element or text-like node (This can include CDATA, Text nodes, and so on). This can be an empty string if the reader is positioned on something other than an element or text node, or if there is no more text content to return in the current context.

Note: The text node can be either an element or an attribute text node.

Remarks
If positioned on an element, ReadString concatenates all text, significant white space, white space, and CData section node types together and returns the concatenated data as the element content. It stops when any markup is encountered. This could occur in a mixed content model, or when an element end tag is read.

If positioned on a text-like node, ReadString performs the same concatenation from the text node to the element end tag. If the reader is positioned on an attribute text node, ReadString has the same functionality as if the reader were position on the element start tag. It returns all the concatenated element text nodes.

Example
The following example displays the text content of each of the elements.
using System;
using System.IO;
using System.Xml;

public class Sample 
{
  public static void Main()
  {
    XmlNodeReader reader = null;

    try
    {
       //Create and load the XML document.
       XmlDocument doc = new XmlDocument();
       doc.LoadXml("<book>" +
                   "<title>Pride And Prejudice</title>" +
                   "<price>19.95</price>" +
                   "<misc/>" +
                   "</book>"); 

       //Load the XmlNodeReader 
       reader = new XmlNodeReader(doc);
  
       //Parse the XML and display the text content of each of the elements.
       while (reader.Read()){
         if (reader.IsStartElement()){
           if (reader.IsEmptyElement)
              Console.WriteLine("<{0}/>", reader.Name);
           else{
               Console.Write("<{0}> ", reader.Name);
               reader.Read(); //Read the start tag.
               if (reader.IsStartElement())  //Handle nested elements.
                   Console.Write("\r\n<{0}>", reader.Name);
               Console.WriteLine(reader.ReadString());  //Read the text content of the element.
           }
         }
       } 
       
     } 

     finally 
     {
        if (reader != null)
          reader.Close();
      }
  }
  
} // End class

    

Return to top


Overridden Method: ResolveEntity()
Summary
Resolves the entity reference for EntityReference nodes.
C# Syntax:
public override void ResolveEntity();
Exceptions
Exception Type Condition
InvalidOperationException The reader is not positioned on an EntityReference node.
Remarks
If the reader is positioned on an EntityReference node (XmlNodeType.EntityReference), if XmlNodeReader.Read is called after calling this method, the entity replacement text is parsed. When the entity replacement text is finished, an EndEntity node is returned to close the entity reference scope.

Note After calling this method, if the entity is part of an attribute value, you must call XmlNodeReader.ReadAttributeValue to step into the entity.
Example
The following example uses ResolveEntity to expand a general entity.
using System;
using System.IO;
using System.Xml;

public class Sample
{
  public static void Main()
  {
     XmlNodeReader reader = null;

     try
     {
       //Create and load an XML document. 
       XmlDocument doc = new XmlDocument();
       doc.LoadXml("<!DOCTYPE book [<!ENTITY h 'hardcover'>]>" +
                   "<book>" +
                   "<title>Pride And Prejudice</title>" +
                   "<misc>&h;</misc>" +
                   "</book>"); 

       //Create the reader.
       reader = new XmlNodeReader(doc);

       reader.MoveToContent();  //Move to the root element.
       reader.Read();  //Move to title start tag.
       reader.Skip();  //Skip the title element.
      
       //Read the misc start tag.  The reader is now positioned on
       //the entity reference node.
       reader.ReadStartElement(); 

       //You must call ResolveEntity to expand the entity reference.
       //The entity replacement text is then parsed and returned as a child node.
       Console.WriteLine("Expand the entity...");
       reader.ResolveEntity();  

       Console.WriteLine("The entity replacement text is returned as a text node.");
       reader.Read();  
       Console.WriteLine("NodeType: {0} Value: {1}", reader.NodeType ,reader.Value);

       Console.WriteLine("An EndEntity node closes the entity reference scope.");
       reader.Read();
       Console.WriteLine("NodeType: {0} Name: {1}", reader.NodeType,reader.Name); 
     
    }
    finally
    {
       if (reader != null)
         reader.Close();
    }
  }
}

    

Return to top


Overridden Method: Skip()
Summary
Skips the children of the current node.
C# Syntax:
public override void Skip();
Remarks
For example, suppose you have the following XML input:
              <a name="bob" age="123">
                 <x/>abc<y/>
               </a>
               <b>
               ...
               </b>
                 
            

If the reader is positioned on the "<a>" node or any of its attributes, calling Skip positions the reader to the "<b>" node.

If the reader is positioned on a leaf node already (such as element "x" or the text node "abc"), calling Skip is the same as calling XmlNodeReader.Read.

This method checks for well-formed XML.

Example
The following example reads the price element node in the XML document.
using System;
using System.IO;
using System.Xml;

public class Sample 
{
  public static void Main()
  {
    XmlNodeReader reader = null;

    try
    {
       //Create and load the XML document.
       XmlDocument doc = new XmlDocument();
       doc.LoadXml("<!-- sample XML -->" +
                   "<book>" +
                   "<title>Pride And Prejudice</title>" +
                   "<price>19.95</price>" +
                   "</book>");

       //Load the XmlNodeReader 
       reader = new XmlNodeReader(doc);

       reader.MoveToContent(); //Move to the book node.
       reader.Read();  //Read the book start tag.
       reader.Skip();   //Skip the title element.

       Console.WriteLine(reader.ReadOuterXml());  //Read the price element.

     } 

     finally 
     {
        if (reader != null)
          reader.Close();
      }
  }
} // End class

    

Return to top


Method: ToString()
Inherited
See base class member description: System.Object.ToString
C# Syntax:
public virtual string ToString();

For more information on members inherited from System.Object click on the link above.

Return to top


Top of page

Copyright (c) 2002 Microsoft Corporation. All rights reserved.