Condividi tramite


XmlWriter.WriteNode Metodo

Definizione

Copia tutti gli elementi dell'oggetto di origine nell'istanza corrente del writer.

Overload

WriteNode(XmlReader, Boolean)

Quando ne viene eseguito l'override in una classe derivata, copia tutto il contenuto del lettore nel writer e sposta il lettore all'inizio del successivo elemento di pari livello.

WriteNode(XPathNavigator, Boolean)

Copia tutti gli elementi dall'oggetto XPathNavigator nel writer. La posizione di XPathNavigator resta invariata.

Commenti

Per la versione asincrona di questo metodo, vedere WriteNodeAsync.

WriteNode(XmlReader, Boolean)

Quando ne viene eseguito l'override in una classe derivata, copia tutto il contenuto del lettore nel writer e sposta il lettore all'inizio del successivo elemento di pari livello.

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)

Parametri

reader
XmlReader

XmlReader da cui leggere.

defattr
Boolean

true per copiare gli attributi predefiniti dalla classe XmlReader; in caso contrario, false.

Eccezioni

reader è null.

reader contiene caratteri non validi.

È stato chiamato un metodo della classe XmlWriter prima del completamento di un'operazione asincrona precedente. In questo caso, viene generata l'eccezione InvalidOperationException con il messaggio "È già in corso un'operazione asincrona".

Esempio

Nell'esempio seguente vengono scritti i nodi del primo e dell'ultimo libro nella 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

Nell'esempio viene usato il file, , books.xmlcome 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>

Commenti

Nella tabella seguente vengono illustrati i tipi di nodo supportati per questo metodo.

Tipo di nodo Comportamento WriteNode
None Scrive tutti i nodi indipendentemente dal tipo. Ovvero, il writer usa e XmlReader scrive tutti i nodi letti, inclusi attributi, istruzioni di elaborazione, commenti e così via.

Questa situazione si verifica quando l'oggetto XmlReader si trova in uno stato iniziale. (La XmlReader.ReadState proprietà restituisce ReaderState.Initial).
Element Scrive il nodo dell'elemento e tutti i nodi dell'attributo.
Attribute Nessuna operazione. In sostituzione usare WriteStartAttribute o WriteAttributeString.
Text Scrive il nodo testo.
CDATA Scrive il nodo della sezione CDATA.
EntityReference Scrive il nodo di riferimento dell'entità.
ProcessingInstruction Scrive il nodo dell'istruzione di elaborazione.
Comment Scrive il nodo di commento.
DocumentType Scrive il nodo del tipo di documento.
SignificantWhitespace Scrive il nodo spazio vuoto significativo.
Whitespace Scrive il nodo spazio vuoto.
EndElement Scrive il tag dell'elemento finale.
EndEntity Nessuna operazione.
XmlDeclaration Scrive il nodo di dichiarazione XML.

Se il lettore si trova nello stato iniziale, questo metodo sposta il lettore alla fine del file. Se il lettore è già alla fine del file o in uno stato chiuso, questo metodo non è operativo.

Il codice C# seguente copia un intero documento di input XML nella console:

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

Se il nodo radice è stato spostato e viene posizionato altrove nel documento l'esempio C# seguente scrive correttamente i nodi.

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 il lettore è configurato per restituire spazi vuoti e il writer è configurato per l'output del rientro, WriteNode può produrre un output strano. Si ottiene essenzialmente la formattazione doppia.

Per la versione asincrona di questo metodo, vedere WriteNodeAsync.

Si applica a

WriteNode(XPathNavigator, Boolean)

Copia tutti gli elementi dall'oggetto XPathNavigator nel writer. La posizione di XPathNavigator resta invariata.

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)

Parametri

navigator
XPathNavigator

XPathNavigator da cui copiare.

defattr
Boolean

true per copiare gli attributi predefiniti; in caso contrario, false.

Eccezioni

navigator è null.

È stato chiamato un metodo della classe XmlWriter prima del completamento di un'operazione asincrona precedente. In questo caso, viene generata l'eccezione InvalidOperationException con il messaggio "È già in corso un'operazione asincrona".

Esempio

Nell'esempio seguente viene usato il WriteNode metodo per copiare il primo nodo del libro da un documento e scriverlo nella 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

Nell'esempio viene usato il file books.xml come 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>

Commenti

Nella tabella seguente vengono illustrati i tipi di nodo supportati XPath per questo metodo.

Xpathnodetype Comportamento WriteNode
Root Scrive tutti i nodi indipendentemente dal tipo. Vale a dire, il writer usa e XPathNavigator scrive tutti i nodi dal nodo radice (inclusi attributi, istruzioni di elaborazione, commenti e così via).
Element Scrive il nodo dell'elemento e tutti i nodi dell'attributo.
Attribute Nessuna operazione. In sostituzione usare WriteStartAttribute o WriteAttributeString.
Text Scrive il nodo testo.
Namespace Nessuna operazione. Usare il WriteStartAttribute metodo o WriteAttributeString per scrivere la dichiarazione dello spazio dei nomi.
ProcessingInstruction Scrive il nodo dell'istruzione di elaborazione.
Comment Scrive il nodo di commento.
SignificantWhitespace Scrive il nodo spazio vuoto significativo.
Whitespace Scrive il nodo spazio vuoto.

Per la versione asincrona di questo metodo, vedere WriteNodeAsync.

Si applica a