XmlReader.Read Метод

Определение

Когда переопределено в производном классе, считывает из потока следующий узел.When overridden in a derived class, reads the next node from the stream.

public:
 abstract bool Read();
public abstract bool Read ();
abstract member Read : unit -> bool
Public MustOverride Function Read () As Boolean

Возвращаемое значение

true, если считывание узла прошло успешно. В противном случае — false.true if the next node was read successfully; otherwise, false.

Исключения

Произошла ошибка при синтаксическом анализе XML.An error occurred while parsing the XML.

Метод XmlReader вызван перед завершением предыдущей асинхронной операции.An XmlReader method was called before a previous asynchronous operation finished. В этом случае возникает исключение InvalidOperationException с сообщением "Асинхронная операция уже выполняется".In this case, InvalidOperationException is thrown with the message "An asynchronous operation is already in progress."

Примеры

В следующем примере считывается XML-файл и отображаются все узлы:The following example reads an XML file and displays each of the nodes:

XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Parse;
XmlReader reader = XmlReader.Create("items.xml", settings);
  
reader.MoveToContent();
  // 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("<![CDATA[{0}]]>", 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.DocumentType:
           Console.Write("<!DOCTYPE {0} [{1}]", reader.Name, reader.Value);
           break;
       case XmlNodeType.EntityReference:
           Console.Write(reader.Name);
           break;
       case XmlNodeType.EndElement:
           Console.Write("</{0}>", reader.Name);
           break;
   } 
}
Dim settings As New XmlReaderSettings()
settings.DtdProcessing = DtdProcessing.Parse
Dim reader As XmlReader = XmlReader.Create("items.xml", settings)
reader.MoveToContent()
' Parse the file and display each of the nodes.
While reader.Read()
  Select Case reader.NodeType
    Case XmlNodeType.Element
      Console.Write("<{0}>", reader.Name)
    Case XmlNodeType.Text
      Console.Write(reader.Value)
    Case XmlNodeType.CDATA
      Console.Write("<![CDATA[{0}]]>", reader.Value)
    Case XmlNodeType.ProcessingInstruction
      Console.Write("<?{0} {1}?>", reader.Name, reader.Value)
    Case XmlNodeType.Comment
      Console.Write("<!--{0}-->", reader.Value)
    Case XmlNodeType.XmlDeclaration
      Console.Write("<?xml version='1.0'?>")
    Case XmlNodeType.Document
    Case XmlNodeType.DocumentType
      Console.Write("<!DOCTYPE {0} [{1}]", reader.Name, reader.Value)
    Case XmlNodeType.EntityReference
      Console.Write(reader.Name)
    Case XmlNodeType.EndElement
      Console.Write("</{0}>", reader.Name)
  End Select
End While

В примере используется файл items.xml.The sample uses the items.xml file.

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

Выходные данные:Output:

<Item>Test with an entity: 123</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: A</Item><!-- Fourteen chars in this element.--><Item>1234567890ABCD</Item></Items>

Комментарии

При первоначальном создании и инициализации XmlReader сведения недоступны.When an XmlReader is first created and initialized, there is no information available. Для чтения первого узла необходимо вызвать Read.You must call Read to read the first node. Метод Read задает состояние запуска модуля чтения XML ReadState.Initial и последовательно перемещает XML-файл, пока не достигнет конца файла, после чего метод возвращает значение false.The Read method sets the state of the XML reader to initiate ReadState.Initial and moves through the XML file sequentially until it reaches the end of the file, at which point the method returns a value of false.

Для начала синтаксического анализа этому методу требуется по крайней мере четыре байта из потока данных.This method requires at least four bytes from the data stream in order to begin parsing. Если возвращается менее четырех байтов и в потоке больше нет данных, метод возвращает false.If fewer than four bytes are returned and there is no more data in the stream, the method returns false. Если в потоке больше данных, метод будет блокировать анализ до получения четвертого байта.If there is more data in the stream, the method will block parsing until receipt of the fourth byte.

Асинхронную версию этого метода см. в разделе ReadAsync.For the asynchronous version of this method, see ReadAsync.

Применяется к