次の方法で共有


XmlWriter.WriteNode メソッド

定義

ソース オブジェクトから現在のライターのインスタンスにすべてをコピーします。

オーバーロード

WriteNode(XmlReader, Boolean)

派生クラスでオーバーライドされると、リーダーのデータをすべてライターにコピーし、リーダーを次の兄弟の開始位置に移動します。

WriteNode(XPathNavigator, Boolean)

XPathNavigator オブジェクトからライターにすべてをコピーします。 XPathNavigator の位置は変更されません。

注釈

このメソッドの非同期バージョンについては、次を参照してください WriteNodeAsync

WriteNode(XmlReader, Boolean)

派生クラスでオーバーライドされると、リーダーのデータをすべてライターにコピーし、リーダーを次の兄弟の開始位置に移動します。

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)

パラメーター

reader
XmlReader

読み取り元の XmlReader

defattr
Boolean

XmlReader の既定の属性をコピーする場合は true。それ以外の場合は false

例外

readernullです。

reader に無効な文字が含まれています。

先行の非同期操作が完了する前に、XmlWriter メソッドが呼び出されました。 この場合、「非同期操作が既に実行されています」というメッセージと共に InvalidOperationException がスローされます。

次の例では、最初と最後のブックのノードをコンソールに書き込みます。

#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

この例では、 books.xmlファイルを入力として使用します。

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

注釈

次の表に、このメソッドでサポートされているノードの種類を示します。

NodeType WriteNode の動作
None 種類に関係なく、すべてのノードを書き出します。 つまり、ライターは、属性、処理命令、コメントなど、読み取られたすべてのノードを使用 XmlReader して書き込みます。

この状況は、初期状態の場合 XmlReader に発生します。 (このプロパティは XmlReader.ReadState 返します ReaderState.Initial)。
Element 要素ノードと属性ノードを書き出します。
Attribute 何も実行しません。 代わりに、WriteStartAttribute タグまたは WriteAttributeString タグを使用してください。
Text テキスト ノードを書き出します。
CDATA CDATA セクション ノードを書き出します。
EntityReference エンティティ参照ノードを書き出します。
ProcessingInstruction 処理命令ノードを書き出します。
Comment コメント ノードを書き出します。
DocumentType ドキュメントの種類のノードを書き込みます。
SignificantWhitespace 重要な空白ノードを書き出します。
Whitespace 空白ノードを書き込みます。
EndElement 終了要素タグを書き出します。
EndEntity 何も実行しません。
XmlDeclaration XML 宣言ノードを書き出します。

リーダーが初期状態の場合、このメソッドはリーダーをファイルの末尾に移動します。 リーダーが既にファイルの末尾または閉じた状態にある場合、このメソッドは操作不可能です。

次の C# コードは、XML 入力ドキュメント全体をコンソールにコピーします。

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

ルート ノードから移動し、ドキュメント内の別の場所に配置されている場合、次の C# の例では、ノードが正しく書き込まれます。

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

リーダーが空白を返すように構成されていて、ライターが出力をインデントするように構成されている場合は、 WriteNode 奇妙な出力が生成される可能性があります。 基本的に二重の書式設定が行われます。

このメソッドの非同期バージョンについては、次を参照してください WriteNodeAsync

適用対象

WriteNode(XPathNavigator, Boolean)

XPathNavigator オブジェクトからライターにすべてをコピーします。 XPathNavigator の位置は変更されません。

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)

パラメーター

navigator
XPathNavigator

コピー元の XPathNavigator

defattr
Boolean

既定の属性をコピーする場合は true。それ以外の場合は false

例外

navigatornullです。

先行の非同期操作が完了する前に、XmlWriter メソッドが呼び出されました。 この場合、「非同期操作が既に実行されています」というメッセージと共に InvalidOperationException がスローされます。

次の例では、メソッドを WriteNode 使用してドキュメントから最初のブック ノードをコピーし、コンソールに書き込みます。

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

この例では、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>

注釈

次の表に、このメソッドでサポートされている XPath ノードの種類を示します。

XPathNodeType WriteNode の動作
Root 種類に関係なく、すべてのノードを書き出します。 つまり、ライターはルート ノードからすべてのノード (属性、処理命令、コメントなど) を使用 XPathNavigator して書き込みます。
Element 要素ノードと属性ノードを書き出します。
Attribute 何も実行しません。 代わりに、WriteStartAttribute タグまたは WriteAttributeString タグを使用してください。
Text テキスト ノードを書き出します。
Namespace 何も実行しません。 or WriteAttributeString メソッドをWriteStartAttribute使用して名前空間宣言を記述します。
ProcessingInstruction 処理命令ノードを書き出します。
Comment コメント ノードを書き出します。
SignificantWhitespace 重要な空白ノードを書き出します。
Whitespace 空白ノードを書き込みます。

このメソッドの非同期バージョンについては、次を参照してください WriteNodeAsync

適用対象