XmlWriter.WriteNode Metódus

Definíció

A forrásobjektumból az aktuális írópéldányba másol mindent.

Túlterhelések

Name Description
WriteNode(XmlReader, Boolean)

Ha felül van bírálva egy származtatott osztályban, az olvasótól az íróig mindent átmásolt, és az olvasót a következő testvér elejére helyezi.

WriteNode(XPathNavigator, Boolean)

Mindent átmásolja az XPathNavigator objektumból az írónak. A helyzet XPathNavigator változatlan marad.

Megjegyzések

A metódus aszinkron verziójáról lásd WriteNodeAsync: .

WriteNode(XmlReader, Boolean)

Forrás:
XmlWriter.cs
Forrás:
XmlWriter.cs
Forrás:
XmlWriter.cs
Forrás:
XmlWriter.cs
Forrás:
XmlWriter.cs

Ha felül van bírálva egy származtatott osztályban, az olvasótól az íróig mindent átmásolt, és az olvasót a következő testvér elejére helyezi.

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)

Paraméterek

reader
XmlReader

A XmlReader olvasandó szöveg.

defattr
Boolean

true az alapértelmezett attribútumok másolásához az XmlReader; egyéb esetben false.

Kivételek

reader az null.

reader érvénytelen karaktereket tartalmaz.

Egy XmlWriter metódust hívtak meg, mielőtt egy korábbi aszinkron művelet befejeződött. Ebben az esetben InvalidOperationException a "Aszinkron művelet már folyamatban van" üzenet jelenik meg.

Példák

Az alábbi példa az első és az utolsó könyvcsomópontot írja ki a konzolra.

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

A példa a fájlt books.xmlhasználja bemenetként.

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

Megjegyzések

Az alábbi táblázat a metódus által támogatott csomóponttípusokat mutatja be.

Csomópont típusa WriteNode viselkedése
None Típustól függetlenül írja ki az összes csomópontot. Ez azt jelzi, hogy az író az összes olvasott csomópontot felhasználja XmlReader , beleértve az attribútumokat, a feldolgozási utasításokat, a megjegyzéseket stb.

Ez a helyzet akkor fordul elő, ha a XmlReader rendszer kezdeti állapotban van. (A XmlReader.ReadState tulajdonság visszaadja a következőt ReaderState.Initial: ).
Element Kiírja az elemcsomópontot és az attribútumcsomópontokat.
Attribute Nincs művelet. Használja inkább a WriteStartAttribute vagy WriteAttributeString elemet.
Text Kiírja a szövegcsomópontot.
CDATA Kiírja a CDATA szakaszcsomópontot.
EntityReference Kiírja az entitás referenciacsomópontot.
ProcessingInstruction Kiírja a feldolgozási utasítás csomópontot.
Comment Kiírja a megjegyzéscsomópontot.
DocumentType Kiírja a dokumentumtípus-csomópontot.
SignificantWhitespace Kiírja a jelentős üres hely csomópontot.
Whitespace Kiírja a üres hely csomópontot.
EndElement Kiírja a záróelem címkéjét.
EndEntity Nincs művelet.
XmlDeclaration Kiírja az XML-deklarációs csomópontot.

Ha az olvasó kezdeti állapotban van, ez a metódus a fájl végére helyezi át az olvasót. Ha az olvasó már a fájl végén vagy zárt állapotban van, ez a módszer nem működik.

A következő C#-kód egy teljes XML-bemeneti dokumentumot másol a konzolra:

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

Ha eltávolította a gyökércsomópontot, és a dokumentumban máshol van elhelyezve, a következő C# példa helyesen írja ki a csomópontokat.

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

Ha az olvasó úgy van konfigurálva, hogy üres területet ad vissza, és az író a kimenet behúzására van konfigurálva, WriteNode furcsa kimenetet eredményezhet. Lényegében dupla formázást fog kapni.

A metódus aszinkron verziójáról lásd WriteNodeAsync: .

A következőre érvényes:

WriteNode(XPathNavigator, Boolean)

Forrás:
XmlWriter.cs
Forrás:
XmlWriter.cs
Forrás:
XmlWriter.cs
Forrás:
XmlWriter.cs
Forrás:
XmlWriter.cs

Mindent átmásolja az XPathNavigator objektumból az írónak. A helyzet XPathNavigator változatlan marad.

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)

Paraméterek

navigator
XPathNavigator

A XPathNavigator másolandó fájl.

defattr
Boolean

trueaz alapértelmezett attribútumok másolása; egyéb esetben. false

Kivételek

navigator az null.

Egy XmlWriter metódust hívtak meg, mielőtt egy korábbi aszinkron művelet befejeződött. Ebben az esetben InvalidOperationException a "Aszinkron művelet már folyamatban van" üzenet jelenik meg.

Példák

Az alábbi példa az WriteNode első könyvcsomópont dokumentumból való másolására és a konzolra való írására használható.

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

A példa a books.xml fájlt használja bemenetként.

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

Megjegyzések

Az alábbi táblázat a metódus által támogatott XPath csomóponttípusokat mutatja be.

XPathNodeType WriteNode viselkedése
Root Típustól függetlenül írja ki az összes csomópontot. Vagyis az író a gyökércsomópont összes csomópontját felhasználja XPathNavigator és kiírja (beleértve az attribútumokat, a feldolgozási utasításokat, a megjegyzéseket stb.).
Element Kiírja az elemcsomópontot és az attribútumcsomópontokat.
Attribute Nincs művelet. Használja inkább a WriteStartAttribute vagy WriteAttributeString elemet.
Text Kiírja a szövegcsomópontot.
Namespace Nincs művelet. A névtér deklarációjának megírásához használja a WriteStartAttribute vagy WriteAttributeString a metódust.
ProcessingInstruction Kiírja a feldolgozási utasítás csomópontot.
Comment Kiírja a megjegyzéscsomópontot.
SignificantWhitespace Kiírja a jelentős üres hely csomópontot.
Whitespace Kiírja a üres hely csomópontot.

A metódus aszinkron verziójáról lásd WriteNodeAsync: .

A következőre érvényes: