Sdílet prostřednictvím


XmlWriter.WriteNode Metoda

Definice

Zkopíruje vše ze zdrojového objektu do aktuální instance zapisovače.

Přetížení

WriteNode(XmlReader, Boolean)

Při přepsání v odvozené třídě zkopíruje všechno od čtenáře do zapisovač a přesune čtenáře na začátek dalšího sesílání.

WriteNode(XPathNavigator, Boolean)

Zkopíruje všechno od objektu XPathNavigator do zapisovače. Pozice XPathNavigator zůstává beze změny.

Poznámky

Asynchronní verze této metody naleznete v tématu WriteNodeAsync.

WriteNode(XmlReader, Boolean)

Při přepsání v odvozené třídě zkopíruje všechno od čtenáře do zapisovač a přesune čtenáře na začátek dalšího sesílání.

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)

Parametry

reader
XmlReader

Čtení XmlReader od.

defattr
Boolean

true pro zkopírování výchozích atributů z ; XmlReaderjinak , false.

Výjimky

reader je null.

reader obsahuje neplatné znaky.

XmlWriter Metoda byla volána před dokončením předchozí asynchronní operace. V tomto případě InvalidOperationException se vyvolá zpráva "Asynchronní operace už probíhá".

Příklady

Následující příklad zapíše první a poslední uzly knihy do konzoly.

#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

Příklad používá soubor , books.xmljako vstup.

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

Poznámky

Následující tabulka ukazuje podporované typy uzlů pro tuto metodu.

Nodetype Chování uzlu WriteNode
None Zapíše všechny uzly bez ohledu na typ. To znamená, že zapisovač využívá a zapisuje XmlReader všechny uzly, které čtou, včetně atributů, pokynů ke zpracování, komentářů atd.

K této situaci dochází v případě, že XmlReader je v počátečním stavu. (Vlastnost XmlReader.ReadState vrátí ReaderState.Initial).
Element Zapíše uzel elementu a všechny uzly atributů.
Attribute Žádná operace. Použijte WriteStartAttribute nebo WriteAttributeString místo toho.
Text Zapíše textový uzel.
CDATA Zapíše uzel oddílu CDATA.
EntityReference Zapíše referenční uzel entity.
ProcessingInstruction Zapíše uzel instrukce zpracování.
Comment Zapíše uzel komentáře.
DocumentType Zapíše uzel typu dokumentu.
SignificantWhitespace Zapíše významný prázdný uzel.
Whitespace Zapíše prázdný uzel.
EndElement Zapíše značku koncového prvku.
EndEntity Žádná operace.
XmlDeclaration Zapíše uzel deklarace XML.

Pokud je čtenář v počátečním stavu, tato metoda přesune čtenáře na konec souboru. Pokud je čtenář již na konci souboru nebo v uzavřeném stavu, tato metoda není funkční.

Následující kód jazyka C# zkopíruje do konzoly celý vstupní dokument XML:

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

Pokud jste přesunuli kořenový uzel a nacházíte se jinde v dokumentu, následující příklad jazyka C# správně zapíše uzly.

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

Pokud je čtečka nakonfigurovaná tak, aby vrátila prázdné místo a zapisovač má nakonfigurovaný odsazení výstupu, WriteNode může způsobit podivný výstup. V podstatě budete dostávat dvojité formátování.

Asynchronní verze této metody naleznete v tématu WriteNodeAsync.

Platí pro

WriteNode(XPathNavigator, Boolean)

Zkopíruje všechno od objektu XPathNavigator do zapisovače. Pozice XPathNavigator zůstává beze změny.

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)

Parametry

navigator
XPathNavigator

Zkopírovat XPathNavigator z.

defattr
Boolean

truekopírování výchozích atributů; v opačném případě . false

Výjimky

navigator je null.

XmlWriter Metoda byla volána před dokončením předchozí asynchronní operace. V tomto případě InvalidOperationException se vyvolá zpráva "Asynchronní operace už probíhá".

Příklady

Následující příklad používá metodu WriteNode ke zkopírování prvního uzlu knihy z dokumentu a jeho zápisu do konzoly.

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

Příklad používá jako vstup soubor books.xml.

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

Poznámky

Následující tabulka ukazuje podporované XPath typy uzlů pro tuto metodu.

XPathNodeType Chování uzlu WriteNode
Root Zapíše všechny uzly bez ohledu na typ. To znamená, že zapisovač využívá a zapisuje XPathNavigator všechny uzly z kořenového uzlu (včetně atributů, pokynů pro zpracování, komentářů atd.).
Element Zapíše uzel elementu a všechny uzly atributů.
Attribute Žádná operace. Použijte WriteStartAttribute nebo WriteAttributeString místo toho.
Text Zapíše textový uzel.
Namespace Žádná operace. K zápisu WriteStartAttribute deklarace oboru názvů použijte metodu nebo WriteAttributeString metodu.
ProcessingInstruction Zapíše uzel instrukce zpracování.
Comment Zapíše uzel komentáře.
SignificantWhitespace Zapíše významný prázdný uzel.
Whitespace Zapíše prázdný uzel.

Asynchronní verze této metody naleznete v tématu WriteNodeAsync.

Platí pro