Compartilhar via


XmlWriter.WriteNode Método

Definição

Copia tudo do objeto de origem para a instância atual do gravador.

Sobrecargas

WriteNode(XmlReader, Boolean)

Quando substituído em uma classe derivada, copia tudo do leitor no gravador e move o leitor para o início do próximo irmão.

WriteNode(XPathNavigator, Boolean)

Copia tudo do objeto XPathNavigator no gravador. A posição do XPathNavigator permanece inalterada.

Comentários

Para obter a versão assíncrona deste método, consulte WriteNodeAsync.

WriteNode(XmlReader, Boolean)

Quando substituído em uma classe derivada, copia tudo do leitor no gravador e move o leitor para o início do próximo irmão.

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)

Parâmetros

reader
XmlReader

O XmlReader para leitura.

defattr
Boolean

true para copiar os atributos padrão do XmlReader; caso contrário, false.

Exceções

reader é null.

reader contém caracteres inválidos.

Um método XmlWriter foi chamado antes do término de uma operação assíncrona anterior. Nesse caso, InvalidOperationException será gerado com a mensagem “Uma operação assíncrona já está em andamento”.

Exemplos

O exemplo a seguir grava os nós do primeiro e último livro no 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

O exemplo usa o arquivo, books.xmlcomo entrada.

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

Comentários

A tabela a seguir mostra os tipos de nó com suporte para este método.

NodeType Comportamento de WriteNode
None Grava todos os nós independentemente do tipo. Ou seja, o gravador consome XmlReader e grava todos os nós lidos, incluindo atributos, instruções de processamento, comentários e assim por diante.

Essa situação ocorre quando o XmlReader estado inicial está em estado inicial. (A XmlReader.ReadState propriedade retorna ReaderState.Initial).
Element Grava o nó de elemento e quaisquer nós de atributo.
Attribute Sem operação. Use WriteStartAttribute ou WriteAttributeString em vez disso.
Text Remove o nó de texto.
CDATA remove o nó da seção CDATA.
EntityReference Grava o nó de referência da entidade.
ProcessingInstruction Grava o nó de instrução de processamento.
Comment Grava o nó de comentário.
DocumentType Grava o nó de tipo de documento.
SignificantWhitespace Grava o nó de espaço em branco significativo.
Whitespace Grava o nó de espaço em branco.
EndElement Grava a marca do elemento final.
EndEntity Sem operação.
XmlDeclaration Grava o nó de declaração XML.

Se o leitor estiver no estado inicial, esse método moverá o leitor para o final do arquivo. Se o leitor já estiver no final do arquivo ou em um estado fechado, esse método não estará operacional.

O código C# a seguir copia um documento de entrada XML inteiro para o console:

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

Se você tiver saído do nó raiz e estiver posicionado em outro lugar no documento, o exemplo de C# a seguir gravará corretamente os nós.

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);  
 }  

Se o leitor estiver configurado para retornar espaço em branco e o gravador estiver configurado para saída de recuo, WriteNode poderá produzir uma saída estranha. Você estará essencialmente recebendo formatação dupla.

Para obter a versão assíncrona deste método, consulte WriteNodeAsync.

Aplica-se a

WriteNode(XPathNavigator, Boolean)

Copia tudo do objeto XPathNavigator no gravador. A posição do XPathNavigator permanece inalterada.

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)

Parâmetros

navigator
XPathNavigator

O XPathNavigator do qual copiar.

defattr
Boolean

true para copiar os atributos padrão; caso contrário, false.

Exceções

navigator é null.

Um método XmlWriter foi chamado antes do término de uma operação assíncrona anterior. Nesse caso, InvalidOperationException será gerado com a mensagem “Uma operação assíncrona já está em andamento”.

Exemplos

O exemplo a seguir usa o WriteNode método para copiar o primeiro nó do livro de um documento e gravá-lo no 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

O exemplo usa o arquivo books.xml como entrada.

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

Comentários

A tabela a seguir mostra os tipos de nó com XPath suporte para este método.

Xpathnodetype Comportamento de WriteNode
Root Grava todos os nós independentemente do tipo. Ou seja, o gravador consome XPathNavigator e grava todos os nós do nó raiz (incluindo atributos, instruções de processamento, comentários e assim por diante).)
Element Grava o nó de elemento e quaisquer nós de atributo.
Attribute Sem operação. Use WriteStartAttribute ou WriteAttributeString em vez disso.
Text Remove o nó de texto.
Namespace Sem operação. Use o método ou WriteAttributeString o WriteStartAttribute método para gravar a declaração de namespace.
ProcessingInstruction Grava o nó de instrução de processamento.
Comment Grava o nó de comentário.
SignificantWhitespace Grava o nó de espaço em branco significativo.
Whitespace Grava o nó de espaço em branco.

Para obter a versão assíncrona deste método, consulte WriteNodeAsync.

Aplica-se a