次の方法で共有


XmlWriter.WriteNode メソッド

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

Public Overridable Sub WriteNode( _
   ByVal reader As XmlReader, _   ByVal defattr As Boolean _)
[C#]
public virtual void WriteNode(XmlReaderreader,booldefattr);
[C++]
public: virtual void WriteNode(XmlReader* reader,booldefattr);
[JScript]
public function WriteNode(
   reader : XmlReader,defattr : Boolean);

パラメータ

  • reader
    読み取り元の XmlReader
  • defattr
    XmlReader の既定の属性をコピーする場合は true 。それ以外の場合は false

例外

例外の種類 条件
ArgumentException reader が null 参照 (Visual Basic では Nothing) です。

解説

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

ノード型 WriteNode の動作
Element 要素ノードと任意の属性ノードを書き込みます。
Attribute 操作なし。代わりに、 WriteStartAttribute または WriteAttributeString を使用します。
Text テキスト ノードを書き込みます。
CDATA CDATA セクション ノードを書き込みます。
EntityReference エンティティ参照ノードを書き込みます。
ProcessingInstruction 処理命令ノードを書き込みます。
Comment コメント ノードを書き込みます。
DocumentType ドキュメント型ノードを書き込みます。
SignificantWhitespace 有意な空白ノードを書き込みます。
Whitespace 空白ノードを書き込みます。
EndElement 操作なし。
EndEntity 操作なし。
XmlDeclaration XML 宣言ノードを書き込みます。

リーダーが初期状態の場合、このメソッドはリーダーをファイルの末尾に移動します。リーダーが既にファイルの末尾にあるか、終了状態の場合、このメソッドは機能しません。

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

XmlTextReader reader = new XmlTextReader(myfile);
XmlTextWriter writer = new XmlTextWriter(Console.Out);
writer.WriteNode(reader, false);

ルート ノードから離れてドキュメント内の別の場所にいる場合、次の C# の例は、ノードを正しく書き込みます。

XmlTextReader reader = new XmlTextReader(myfile);
reader.Read(); // Read PI
reader.Read(); // Read Comment
reader.Read(); // Read DOCType
XmlTextWriter writer = new XmlTextWriter(Console.Out);
while (!reader.EOF){
 writer.WriteNode(reader, false);
}

リーダーが空白を返すように構成され、ライタの Formatting が "Indented" に設定されている場合、 WriteNode は予期しない出力を生成する場合があります。基本的に、二重の書式指定が生成されます。

使用例

[Visual Basic, C#, C++] 最初と最後の Book ノードをコンソールに書き込む例を次に示します。

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

[C#] 
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();

  }
}

[C++] 
#using <mscorlib.dll>
#using <System.Xml.dll>
using namespace System;
using namespace System::IO;
using namespace System::Xml;

int main() 
{
   XmlTextReader* reader = new XmlTextReader(S"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(S"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();
}

この例では、入力として、 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>

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard

参照

XmlWriter クラス | XmlWriter メンバ | System.Xml 名前空間