現在オフラインです。再接続するためにインターネットの接続を待っています

.NET Framework SDK のストリームから XML データを読み取る方法

この記事は、以前は次の ID で公開されていました: JP301228
この資料では、次の Microsoft .NET Framework クラス ライブラリの名前空間を参照しています。
  • System.Xml
  • System.IO

この資料の内容

概要
この資料では、XmlTextReader クラスを使用してストリームから XML (Extensible Markup Language) を読み取る方法の例を示します。ストリームは、サーバーからのバイト ストリーム、ファイル、または TextReader クラスなど、さまざまなソースから取得されます。

先頭に戻る

必要条件

必要なハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、Service Pack は次のとおりです。
  • Microsoft Windows 2000 Professional、Windows 2000 Server、Windows 2000 Advanced Server、Windows NT 4.0 Server のいずれか
  • Microsoft Visual Studio .NET
この資料は、次のトピックについて詳しい知識のあるユーザーを対象としています。
  • XML の用語
  • XML の作成と読み取り

ストリームから XML を読み取る方法

  1. Visual Studio .NET を起動します。
  2. 新しい Microsoft Visual Basic (VB) コンソール アプリケーションまたは Microsoft Visual C# コンソール アプリケーションを作成します。

    : 以下の手順では、アプリケーションをビルドする方法の詳細を提供しています。手順 10. には完全なコードが記載されています。手順 10. に直接進むこともできます。
  3. プロジェクトに System.Xml 名前空間および System.IO 名前空間への参照が含まれていることを確認します。
  4. Xml 名前空間に IMPORTS ステートメントを使用して、後続のコードでこれらの名前空間内の XmlTextReader 宣言を修飾する必要がないようにします。次に示すように、IMPORTS ステートメントは他の宣言を行う前に使用する必要があります。
    Visual Basic .NET のコード
    Imports System.XmlImports System.IO						
    Visual C# のコード
    using System.Xml;using System.IO;						
  5. XML ストリームを作成または取得します。ストリームは、データの入力元または出力先である入力デバイスまたは出力デバイスの抽象表現です (この場合、データは XML データです)。ストリームに対して、書き込みや読み取りを行うことができます。ストリームは、バイトの流れと考えるのが最適です。

    ストリームは、デバイスからの独立性を提供するために使用されるので、たとえばストリームの入力元が変更されても、プログラムを変更する必要はありません。XmlTextReader クラス用にストリームを作成するには、いくつかの異なる方法があります。以下のいずれかのコード サンプルを選択して、デフォルトのモジュールの Main プロシージャに追加します。
    • 以下に StringReader オブジェクトを使用するコード サンプルを示します。

      StringReader オブジェクトは、文字列から文字を読み取り、オブジェクト構築中に文字列値を取得します。

      Visual Basic .NET のコード
      Dim stream as System.IO.StringReaderstream = new StringReader("<?xml version='1.0'?>" & _"<!-- This file is a book store inventory. -->" & _"<bookstore>" & _" <book genre=""autobiography"" 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>" & _"</bookstore>")						
      C# のコード
      StringReader stream;stream = new StringReader("<?xml version='1.0'?>" +	"<!-- This file represents a fragment of a book store inventory database. -->" +	"<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>");						
    • 以下に StreamReader オブジェクトを使用するコード サンプルを示します。

      StreamReader オブジェクトは、ファイルから文字を読み取るために使用されます。このオブジェクトは、オブジェクト構築中に読み取られるファイル名を読み取ります。

      Visual Basic .NET のコード
      Dim stream as System.IO.StreamReader' Loads the XML data in the file books.xml in a new stream.stream = New StreamReader ("books.xml")						
      C# のコード
      System.IO.StreamReader stream = new System.IO.StreamReader ("books.xml");						
      ここでは、Books.xml ファイルが使用されていることに注意してください。独自の Books.xml ファイルを作成することもできます。Visual Studio .Net および .Net Framework SDK にサンプルの Books.xml ファイルが含まれています。

  6. ストリームを指定して XmlTextReader クラスを構築します。一般的に XmlTextReader クラスは、DOM (Document Object Model) のオーバーヘッドを生じさせずに、XML データそのものにアクセスする必要のある場合に使用されます。そのため、XmlTextReader クラスは XML を読み取るためのより高速なメカニズムを提供します。XmlTextReader クラスには、XML データの場所を指定する別のコンストラクタもあります。次のコードでは、ストリームから XmlTextReader クラスを読み込みます。
    Visual Basic .NET のコード
    Dim reader As XmlTextReader = New XmlTextReader (stream)						
    C# のコード
    XmlTextReader reader = null;	reader = new XmlTextReader (stream);						
  7. XML 全体を読み取ります。XML が読み込まれると、XmlTextReader は順次読み取りを実行して、XML データ間を移動し、Read メソッドを使用して次のレコードを取得します。次のレコードが存在しない場合、Read メソッドは False を返します。
    Visual Basic .NET のコード
    Do While (reader.Read())    ' Do some work here on the data.    Console.WriteLine(reader.Name)Loop' Reading of the XML file has finished.Console.ReadLine() 'Pause						
    C# のコード
    while (reader.Read()) {    // Do some work here on the data.    ...}while (reader.Read()) {    // Do some work here on the data.	Console.WriteLine(reader.Name);}Console.ReadLine();						
  8. ノードを調べます。XML データを処理するために、各レコードにはノードの種類があり、この種類は NodeType プロパティで確認できます。Name プロパティと Value プロパティは、現在のノード (またはレコード) のノード名 (要素名と属性名) とノード値 (ノード テキスト) を返します。NodeType 列挙型でノードの種類を判断します。次の例では、要素の名前とドキュメントの種類を表示します。この例では要素の属性を無視していることに注意してください。
    Visual Basic .NET のコード
    Do While (reader.Read())Select Case reader.NodeTypeCase XmlNodeType.Element 'Display beginning of element.Console.Write("<" + reader.Name)Console.WriteLine(">")Case XmlNodeType.Text 'Display the text in each element.Console.WriteLine(reader.Value)Case XmlNodeType.EndElement 'Display end of element.Console.Write("</" + reader.Name)Console.WriteLine(">")End SelectLoop						
    C# のコード
    while (reader.Read()) {    switch (reader.NodeType)     {        case XmlNodeType.Element: // The node is an Element.            Console.Write("<" + reader.Name);   Console.WriteLine(">");            break;  case XmlNodeType.Text: //Display the text in each element.            Console.WriteLine (reader.Value);            break;  case XmlNodeType. EndElement: //Display end of element.            Console.Write("</" + reader.Name);   Console.WriteLine(">");            break;    }}						
  9. 属性を調べます。要素ノードの種類は、ノードの種類に関連付けられた属性ノードのリストを含むことができます。MoveToNextAttribute メソッドは要素の各属性を順番に移動します。HasAttributes プロパティを使用して、ノードに属性があるかどうかを調べます。AttributeCount プロパティは現在のノードの属性数を返します。
    Visual Basic .NET のコード
    Do While (reader.Read())Select Case reader.NodeTypeCase XmlNodeType.Element 'Display beginning of element.Console.Write("<" + reader.Name)         If reader.HasAttributes Then 'If attributes exist         	While reader.MoveToNextAttribute() 					'Display attribute name and value.Console.Write(" {0}='{1}'", reader.Name, reader.Value)End WhileEnd IfConsole.WriteLine(">")Case XmlNodeType.Text 'Display the text in each element.Console.WriteLine(reader.Value)Case XmlNodeType.EndElement 'Display end of element.Console.Write("</" + reader.Name)Console.WriteLine(">")End SelectLoop						
    C# のコード
    while (reader.Read()) {    switch (reader.NodeType)     {        case XmlNodeType.Element: // The node is an Element.            Console.Write("<" + reader.Name);            while (reader.MoveToNextAttribute()) // Read attributes.                Console.Write(" " + reader.Name + "='" + reader.Value + "'");            Console.Write(">");   Console.WriteLine(">");            break;  case XmlNodeType.Text: //Display the text in each element.            Console.WriteLine (reader.Value);            break;  case XmlNodeType. EndElement: //Display end of element.            Console.Write("</" + reader.Name);   Console.WriteLine(">");            break;    }}						

  10. 便宜上、以下に完全なコードを示します。
    Visual Basic.Net のコード
    Imports System.XmlImports System.IOModule Module1    Sub Main()        Dim stream As System.IO.StreamReader        ' Loads the XML data in the file books.xml in a new stream.        stream = New StreamReader("books.xml")        Dim reader As XmlTextReader = New XmlTextReader(stream)        Do While (reader.Read())            Select Case reader.NodeType                Case XmlNodeType.Element 'Display beginning of element.                    Console.Write("<" + reader.Name)                    If reader.HasAttributes Then 'If attributes exist                        While reader.MoveToNextAttribute()                            'Display attribute name and value.                            Console.Write(" {0}='{1}'", reader.Name, reader.Value)                        End While                    End If                    Console.WriteLine(">")                Case XmlNodeType.Text 'Display the text in each element.                    Console.WriteLine(reader.Value)                Case XmlNodeType.EndElement 'Display end of element.                    Console.Write("</" + reader.Name)                    Console.WriteLine(">")            End Select        Loop    End SubEnd Module						

    C# のコード
    using System;using System.Xml;using System.IO;namespace ReadXMLFromStream{	/// <summary>	/// Summary description for Class1.	/// </summary>	class Class1	{		static void Main(string[] args)		{			System.IO.StreamReader stream = new System.IO.StreamReader ("books.xml");			XmlTextReader reader = null;				reader = new XmlTextReader (stream);			while (reader.Read()) 			{				switch (reader.NodeType) 				{					case XmlNodeType.Element: // The node is an Element.						Console.Write("<" + reader.Name);						while (reader.MoveToNextAttribute()) // Read attributes.							Console.Write(" " + reader.Name + "='" + reader.Value + "'");						Console.Write(">");						Console.WriteLine(">");						break;					case XmlNodeType.Text: //Display the text in each element.						Console.WriteLine (reader.Value);						break;					case XmlNodeType. EndElement: //Display end of element.						Console.Write("</" + reader.Name);						Console.WriteLine(">");						break;				}			}		}	}}						
  11. プロジェクトをビルドして実行します。
先頭に戻る
関連情報
詳細については、次のマイクロソフト Web サイトの MSDN Magazine で、「XML in Microsoft .NET: .NET Framework XML Classes and C# Offer Simple, Scalable Data Manipulation」の記事を参照してください。XmlReader、StreamReader、および StringReader クラスの詳細については、Microsoft .NET Framework クラス ライブラリのドキュメントを参照してください。

XmlReader を使用して XML データを読み取る方法の詳細については、Microsoft .NET Framework 開発者ガイドのドキュメントを参照してください。

先頭に戻る
dotnet xml
プロパティ

文書番号:301228 - 最終更新日: 10/26/2005 09:18:00 - リビジョン: 3.3

  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework クラス ライブラリ 1.1
  • kbhowtomaster KB301228
フィードバック