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

文書翻訳 文書翻訳
文書番号: 301228 - 対象製品
この記事は、以前は次の ID で公開されていました: JP301228
すべて展開する | すべて折りたたむ

目次

概要

この資料では、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.Xml
    Imports 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.StringReader
      stream = 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.NodeType
    Case 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 Select
    Loop
    						
    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.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
    						
    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.Xml
    Imports System.IO
    Module 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 Sub
    
    End 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」の記事を参照してください。
http://msdn.microsoft.com/msdnmag/issues/01/01/xml/default.aspx
XmlReader、StreamReader、および StringReader クラスの詳細については、Microsoft .NET Framework クラス ライブラリのドキュメントを参照してください。

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

プロパティ

文書番号: 301228 - 最終更新日: 2005年10月26日 - リビジョン: 3.3
この資料は以下の製品について記述したものです。
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework クラス ライブラリ 1.1
キーワード:?
kbhowtomaster KB301228
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com