XmlWriter.WriteNode Método

Definición

Copia todo el contenido del objeto de origen en la instancia actual del sistema de escritura.Copies everything from the source object to the current writer instance.

Sobrecargas

WriteNode(XmlReader, Boolean)

Cuando se invalida en una clase derivada, copia todo el contenido del lector en el sistema de escritura y desplaza el lector al inicio del siguiente nodo relacionado.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)

Copia todo el contenido del objeto XPathNavigator en el sistema de escritura.Copies everything from the XPathNavigator object to the writer. La posición de XPathNavigator permanece inalterada.The position of the XPathNavigator remains unchanged.

Comentarios

Para obtener la versión asincrónica de este método, vea WriteNodeAsync .For the asynchronous version of this method, see WriteNodeAsync.

WriteNode(XmlReader, Boolean)

Cuando se invalida en una clase derivada, copia todo el contenido del lector en el sistema de escritura y desplaza el lector al inicio del siguiente nodo relacionado.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)

Parámetros

reader
XmlReader

XmlReader desde el que se va a leer.The XmlReader to read from.

defattr
Boolean

Es true para copiar los atributos predeterminados de XmlReader; en caso contrario, es false.true to copy the default attributes from the XmlReader; otherwise, false.

Excepciones

reader es null.reader is null.

reader contiene caracteres no válidos.reader contains invalid characters.

Se llamó un método XmlWriter antes de que se termine una operación asincrónica anterior.An XmlWriter method was called before a previous asynchronous operation finished. En este caso, se genera InvalidOperationException con el mensaje “Ya hay una operación asincrónica en curso”.In this case, InvalidOperationException is thrown with the message "An asynchronous operation is already in progress."

Ejemplos

En el ejemplo siguiente se escribe el primer y el último nodo de libro en la consola.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

En el ejemplo se usa el archivo, books.xml , como entrada.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>

Comentarios

En la tabla siguiente se muestran los tipos de nodo admitidos para este método.The following table shows the supported node types for this method.

NodeTypeNodeType Comportamiento de WriteNodeWriteNode Behavior
None Escribe todos los nodos con independencia del tipo.Writes out all the nodes irrespective of type. Es decir, el escritor consume XmlReader y escribe todos los nodos leídos, incluidos los atributos, las instrucciones de procesamiento, los comentarios, etc.That is, the writer consumes the XmlReader and writes out all the nodes read including attributes, processing instructions, comments, and so on.

Esta situación se produce cuando el XmlReader está en un estado inicial.This situation occurs when the XmlReader is in an initial state. (La XmlReader.ReadState propiedad devuelve ReaderState.Initial ).(The XmlReader.ReadState property returns ReaderState.Initial).
Element Escribe el nodo de elemento y los nodos de atributo.Writes out the element node and any attribute nodes.
Attribute No hay ninguna operación.No operation. Use WriteStartAttribute o WriteAttributeString en su lugar.Use WriteStartAttribute or WriteAttributeString instead.
Text Escribe el nodo de texto.Writes out the text node.
CDATA Escribe el nodo de la sección CDATA.Writes out the CDATA section node.
EntityReference Escribe el nodo de referencia de entidad.Writes out the entity reference node.
ProcessingInstruction Escribe el nodo de instrucción de procesamiento.Writes out the processing instruction node.
Comment Escribe el nodo de comentario.Writes out the comment node.
DocumentType Escribe el nodo de tipo de documento.Writes out the document type node.
SignificantWhitespace Escribe el nodo de espacio en blanco significativo.Writes out the significant white space node.
Whitespace Escribe el nodo de espacio en blanco.Writes out the white space node.
EndElement Escribe la etiqueta del elemento final.Writes out the end element tag.
EndEntity No hay ninguna operación.No operation.
XmlDeclaration Escribe el nodo de declaración XML.Writes out the XML declaration node.

Si el lector está en el estado inicial, este método mueve el lector hasta el final del archivo.If the reader is in the initial state, this method moves the reader to the end of file. Si el lector ya está al final del archivo o en un estado cerrado, este método no es operativo.If the reader is already at the end of file or in a closed state, this method is non-operational.

El siguiente código de C# copia un documento de entrada XML completo en la consola: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);  

Si ha sacado del nodo raíz y está colocado en otro lugar del documento, el siguiente ejemplo de C# escribe correctamente los nodos.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);  
 }  

Si el lector está configurado para devolver el espacio en blanco y el escritor se configura para aplicar sangría a la salida, WriteNode puede producir una salida extraña.If the reader is configured to return white space and the writer has is configured to indent output, WriteNode may produce strange output. Básicamente obtendrá el formato doble.You will essentially be getting double formatting.

Para obtener la versión asincrónica de este método, vea WriteNodeAsync .For the asynchronous version of this method, see WriteNodeAsync.

Se aplica a

WriteNode(XPathNavigator, Boolean)

Copia todo el contenido del objeto XPathNavigator en el sistema de escritura.Copies everything from the XPathNavigator object to the writer. La posición de XPathNavigator permanece inalterada.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)

Parámetros

navigator
XPathNavigator

El XPathNavigator del que se va a copiar.The XPathNavigator to copy from.

defattr
Boolean

Es true para copiar los atributos predeterminados; en caso contrario, es false.true to copy the default attributes; otherwise, false.

Excepciones

navigator es null.navigator is null.

Se llamó un método XmlWriter antes de que se termine una operación asincrónica anterior.An XmlWriter method was called before a previous asynchronous operation finished. En este caso, se genera InvalidOperationException con el mensaje “Ya hay una operación asincrónica en curso”.In this case, InvalidOperationException is thrown with the message "An asynchronous operation is already in progress."

Ejemplos

En el ejemplo siguiente se usa el WriteNode método para copiar el primer nodo de libro de un documento y escribirlo en la consola.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

En el ejemplo se usa el archivo de books.xml como entrada.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>

Comentarios

En la tabla siguiente se muestran los XPath tipos de nodo admitidos para este método.The following table shows the supported XPath node types for this method.

XPathNodeTypeXPathNodeType Comportamiento de WriteNodeWriteNode Behavior
Root Escribe todos los nodos con independencia del tipo.Writes out all the nodes irrespective of type. Es decir, el escritor consume XPathNavigator y escribe todos los nodos del nodo raíz (incluidos los atributos, las instrucciones de procesamiento, los comentarios, etc.).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 Escribe el nodo de elemento y los nodos de atributo.Writes out the element node and any attribute nodes.
Attribute No hay ninguna operación.No operation. Use WriteStartAttribute o WriteAttributeString en su lugar.Use WriteStartAttribute or WriteAttributeString instead.
Text Escribe el nodo de texto.Writes out the text node.
Namespace No hay ninguna operación.No operation. Use el WriteStartAttribute WriteAttributeString método o para escribir la declaración del espacio de nombres.Use the WriteStartAttribute or WriteAttributeString method to write the namespace declaration.
ProcessingInstruction Escribe el nodo de instrucción de procesamiento.Writes out the processing instruction node.
Comment Escribe el nodo de comentario.Writes out the comment node.
SignificantWhitespace Escribe el nodo de espacio en blanco significativo.Writes out the significant white space node.
Whitespace Escribe el nodo de espacio en blanco.Writes out the white space node.

Para obtener la versión asincrónica de este método, vea WriteNodeAsync .For the asynchronous version of this method, see WriteNodeAsync.

Se aplica a