XmlWriter.WriteNode Метод

Определение

Копирует все данные исходного объекта в текущий экземпляр средства записи.Copies everything from the source object to the current writer instance.

Перегрузки

WriteNode(XmlReader, Boolean)

Когда переопределено в производном классе, копирует все данные из средства чтения в средство записи и перемещает средство чтения к началу следующего элемента того же уровня.When overridden in a derived class, copies everything from the reader to the writer and moves the reader to the start of the next sibling.

WriteNode(XPathNavigator, Boolean)

Копирует все из объекта XPathNavigator в средство записи.Copies everything from the XPathNavigator object to the writer. Позиция XPathNavigator остается неизменной.The position of the XPathNavigator remains unchanged.

Комментарии

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

WriteNode(XmlReader, Boolean)

Когда переопределено в производном классе, копирует все данные из средства чтения в средство записи и перемещает средство чтения к началу следующего элемента того же уровня.When overridden in a derived class, copies everything from the reader to the writer and moves the reader to the start of the next sibling.

public:
 virtual void WriteNode(System::Xml::XmlReader ^ reader, bool defattr);
public virtual void WriteNode (System.Xml.XmlReader reader, bool defattr);
abstract member WriteNode : System.Xml.XmlReader * bool -> unit
override this.WriteNode : System.Xml.XmlReader * bool -> unit
Public Overridable Sub WriteNode (reader As XmlReader, defattr As Boolean)

Параметры

reader
XmlReader

Экземпляр XmlReader, из которого выполняется чтение.The XmlReader to read from.

defattr
Boolean

Значение true, чтобы скопировать атрибуты по умолчанию из XmlReader; в противном случае — значение false.true to copy the default attributes from the XmlReader; otherwise, false.

Исключения

reader имеет значение null.reader is null.

Параметр reader содержит недопустимые символы.reader contains invalid characters.

Метод XmlWriter вызван перед завершением предыдущей асинхронной операции.An XmlWriter 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."

Примеры

В следующем примере первая и последняя узлы книги записываются в консоль.The following example writes the first and last book nodes out to the console.

#using <System.Xml.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml;
int main()
{
   XmlTextReader^ reader = gcnew XmlTextReader( "books.xml" );
   reader->WhitespaceHandling = WhitespaceHandling::None;
   
   // Move the reader to the first book element.
   reader->MoveToContent();
   reader->Read();
   
   // Create a writer that outputs to the console.
   XmlTextWriter^ writer = gcnew XmlTextWriter( Console::Out );
   writer->Formatting = Formatting::Indented;
   
   // Write the start tag.
   writer->WriteStartElement( "myBooks" );
   
   // Write the first book.
   writer->WriteNode( reader, false );
   
   // Skip the second book.
   reader->Skip();
   
   // Write the last book.
   writer->WriteNode( reader, false );
   writer->WriteEndElement();
   
   // Close the writer and the reader.
   writer->Close();
   reader->Close();
}

using System;
using System.IO;
using System.Xml;

public class Sample{

  public static void Main(){

    XmlTextReader reader = new XmlTextReader("books.xml");
    reader.WhitespaceHandling = WhitespaceHandling.None;

    //Move the reader to the first book element.
    reader.MoveToContent();
    reader.Read();

    //Create a writer that outputs to the console.
    XmlTextWriter writer = new XmlTextWriter (Console.Out);
    writer.Formatting = Formatting.Indented;
    
    //Write the start tag.
    writer.WriteStartElement("myBooks");

    //Write the first book.
    writer.WriteNode(reader, false);

    //Skip the second book.
    reader.Skip();

    //Write the last book.
    writer.WriteNode(reader, false);
    writer.WriteEndElement();

    //Close the writer and the reader.
    writer.Close();
    reader.Close();
  }
}
Imports System.IO
Imports System.Xml

public class Sample

  public shared sub Main()

    Dim reader as XmlTextReader = new XmlTextReader("books.xml")
    reader.WhitespaceHandling = WhitespaceHandling.None

    'Move the reader to the first book element.
    reader.MoveToContent()
    reader.Read()

    'Create a writer that outputs to the console.
    Dim writer as XmlTextWriter = new XmlTextWriter (Console.Out)
    writer.Formatting = Formatting.Indented
    
    'Write the start tag.
    writer.WriteStartElement("myBooks")

    'Write the first book.
    writer.WriteNode(reader, false)

    'Skip the second book.
    reader.Skip()

    'Write the last book.
    writer.WriteNode(reader, false)
    writer.WriteEndElement()

    'Close the writer and the reader.
    writer.Close()
    reader.Close()

  end sub
end class

В этом примере в качестве входных данных используется файл books.xml.The example uses the file, books.xml, as input.

<bookstore>
  <book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">
    <title>The Autobiography of Benjamin Franklin</title>
    <author>
      <first-name>Benjamin</first-name>
      <last-name>Franklin</last-name>
    </author>
    <price>8.99</price>
  </book>
  <book genre="novel" publicationdate="1967" ISBN="0-201-63361-2">
    <title>The Confidence Man</title>
    <author>
      <first-name>Herman</first-name>
      <last-name>Melville</last-name>
    </author>
    <price>11.99</price>
  </book>
  <book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6">
    <title>The Gorgias</title>
    <author>
      <name>Plato</name>
    </author>
    <price>9.99</price>
  </book>
</bookstore>

Комментарии

В следующей таблице показаны поддерживаемые типы узлов для этого метода.The following table shows the supported node types for this method.

NodeTypeNodeType Поведение ВритенодеWriteNode Behavior
None Записывает все узлы независимо от типа.Writes out all the nodes irrespective of type. Это значит, что модуль записи использует XmlReader и записывает все прочитанные узлы, включая атрибуты, инструкции по обработке, комментарии и т. д.That is, the writer consumes the XmlReader and writes out all the nodes read including attributes, processing instructions, comments, and so on.

Такая ситуация возникает, когда XmlReader находится в начальном состоянии.This situation occurs when the XmlReader is in an initial state. (Свойство XmlReader.ReadState возвращает ReaderState.Initial).(The XmlReader.ReadState property returns ReaderState.Initial).
Element Записывает узел элемента и все узлы атрибутов.Writes out the element node and any attribute nodes.
Attribute Нет операции.No operation. Вместо него следует использовать элементы WriteStartAttribute или WriteAttributeString.Use WriteStartAttribute or WriteAttributeString instead.
Text Записывает текстовый узел.Writes out the text node.
CDATA Записывает узел раздела CDATA.Writes out the CDATA section node.
EntityReference Записывает узел ссылки на сущность.Writes out the entity reference node.
ProcessingInstruction Записывает узел инструкции по обработке.Writes out the processing instruction node.
Comment Записывает узел комментария.Writes out the comment node.
DocumentType Записывает узел типа документа.Writes out the document type node.
SignificantWhitespace Записывает узел значащих пробелов.Writes out the significant white space node.
Whitespace Записывает узел пробела.Writes out the white space node.
EndElement Записывает тег конечного элемента.Writes out the end element tag.
EndEntity Нет операции.No operation.
XmlDeclaration Записывает узел объявления XML.Writes out the XML declaration node.

Если модуль чтения находится в начальном состоянии, этот метод перемещает модуль чтения в конец файла.If the reader is in the initial state, this method moves the reader to the end of file. Если модуль чтения уже находится в конце файла или в закрытом состоянии, этот метод не является операционным.If the reader is already at the end of file or in a closed state, this method is non-operational.

Следующий C# код копирует весь входной XML-документ на консоль:The following C# code copies an entire XML input document to the console:

XmlReader reader = XmlReader.Create(myfile);  
XmlWriter writer = XmlWriter.Create(Console.Out);  
writer.WriteNode(reader, false);  

Если вы переместили с корневого узла и располагаете в другой части документа, в следующем C# примере выполняется правильная запись узлов.If you have moved off the root node and are positioned elsewhere in the document the following C# example correctly writes out the nodes.

XmlReader reader = XmlReader.Create(myfile);  
reader.Read(); // Read PI  
reader.Read(); // Read Comment  
reader.Read(); // Read DOCType  
XmlWriter writer = XmlWriter.Create(Console.Out);  
while (!reader.EOF){  
  writer.WriteNode(reader, false);  
 }  

Если средство чтения настроено для возврата пустого пространства, а модуль записи настроен для отступа выходных данных, WriteNode может получить странный вывод.If the reader is configured to return white space and the writer has is configured to indent output, WriteNode may produce strange output. По сути, вы получаете двойное форматирование.You will essentially be getting double formatting.

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

WriteNode(XPathNavigator, Boolean)

Копирует все из объекта XPathNavigator в средство записи.Copies everything from the XPathNavigator object to the writer. Позиция XPathNavigator остается неизменной.The position of the XPathNavigator remains unchanged.

public:
 virtual void WriteNode(System::Xml::XPath::XPathNavigator ^ navigator, bool defattr);
public virtual void WriteNode (System.Xml.XPath.XPathNavigator navigator, bool defattr);
abstract member WriteNode : System.Xml.XPath.XPathNavigator * bool -> unit
override this.WriteNode : System.Xml.XPath.XPathNavigator * bool -> unit
Public Overridable Sub WriteNode (navigator As XPathNavigator, defattr As Boolean)

Параметры

navigator
XPathNavigator

Элемент XPathNavigator, из которого копируются данные.The XPathNavigator to copy from.

defattr
Boolean

Значение true — копирование атрибутов по умолчанию; в противном случае — false.true to copy the default attributes; otherwise, false.

Исключения

navigator имеет значение null.navigator is null.

Метод XmlWriter вызван перед завершением предыдущей асинхронной операции.An XmlWriter 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."

Примеры

В следующем примере метод WriteNode используется для копирования первого узла книги из документа и его записи в консоль.The following example uses the WriteNode method to copy the first book node from a document and write it to the console.

using System;
using System.IO;
using System.Xml;
using System.Xml.XPath;

public class Sample
{

    public static void Main()
    {

        XPathDocument doc = new XPathDocument("books.xml");
        XPathNavigator nav = doc.CreateNavigator();

        // Create a writer that outputs to the console.
        XmlWriter writer = XmlWriter.Create(Console.Out);

        // Write the start tag.
        writer.WriteStartElement("myBooks");

        // Write the first book.
        nav.MoveToChild("bookstore", "");
        nav.MoveToChild("book", "");
        writer.WriteNode(nav, false);

        // Close the start tag.
        writer.WriteEndElement();

        // Close the writer.
        writer.Close();
    }
}
Imports System.IO
Imports System.Xml
Imports System.Xml.XPath

Module Module1

    Sub Main()

        Dim doc As XPathDocument = New XPathDocument("books.xml")
        Dim nav As XPathNavigator = doc.CreateNavigator()

        ' Create a writer that outputs to the console.
        Dim writer As XmlWriter = XmlWriter.Create(Console.Out)

        ' Write the start tag.
        writer.WriteStartElement("myBooks")

        ' Write the first book.
        nav.MoveToChild("bookstore", "")
        nav.MoveToChild("book", "")
        writer.WriteNode(nav, False)

        ' Close the start tag.
        writer.WriteEndElement()

        ' Close the writer.
        writer.Close()

    End Sub
End Module

В качестве входных данных в примере используется файл books. XML.The example uses the books.xml file as input.

<?xml version="1.0" encoding="utf-8" ?> 
<bookstore>
    <book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
        <title>The Autobiography of Benjamin Franklin</title>
        <author>
            <first-name>Benjamin</first-name>
            <last-name>Franklin</last-name>
        </author>
        <price>8.99</price>
    </book>
    <book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
        <title>The Confidence Man</title>
        <author>
            <first-name>Herman</first-name>
            <last-name>Melville</last-name>
        </author>
        <price>11.99</price>
    </book>
    <book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
        <title>The Gorgias</title>
        <author>
            <name>Plato</name>
        </author>
        <price>9.99</price>
    </book>
</bookstore>

Комментарии

В следующей таблице показаны поддерживаемые типы узлов XPath для этого метода.The following table shows the supported XPath node types for this method.

кспаснодетипеXPathNodeType Поведение ВритенодеWriteNode Behavior
Root Записывает все узлы независимо от типа.Writes out all the nodes irrespective of type. То есть модуль записи использует XPathNavigator и записывает все узлы из корневого узла (включая атрибуты, инструкции по обработке, комментарии и т. д.).That is, the writer consumes the XPathNavigator and writes out all the nodes from the root node (including attributes, processing instructions, comments and so on.)
Element Записывает узел элемента и все узлы атрибутов.Writes out the element node and any attribute nodes.
Attribute Нет операции.No operation. Вместо него следует использовать элементы WriteStartAttribute или WriteAttributeString.Use WriteStartAttribute or WriteAttributeString instead.
Text Записывает текстовый узел.Writes out the text node.
Namespace Нет операции.No operation. Для записи объявления пространства имен используйте метод WriteStartAttribute или WriteAttributeString.Use the WriteStartAttribute or WriteAttributeString method to write the namespace declaration.
ProcessingInstruction Записывает узел инструкции по обработке.Writes out the processing instruction node.
Comment Записывает узел комментария.Writes out the comment node.
SignificantWhitespace Записывает узел значащих пробелов.Writes out the significant white space node.
Whitespace Записывает узел пробела.Writes out the white space node.

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

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