XmlWriter.WriteNode Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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
- 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.xml
come 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.