ファイルから XML データを読み取る場合は、ファイルを使用Visual C++

この記事では、クラスを使用して XmlTextReader ファイルから XML データを読み取る方法を示します。

元の製品バージョン:   Visual C++
元の KB 番号:   815658

概要

この記事では、クラスを使用してファイル XmlTextReader から XML データを読み取る方法について説明します。 この XmlTextReader クラスは、XML データの直接解析とトークン化を提供します。 また、このクラスは、ワールドワイド Web コンソーシアム (W3C) によって定義される XML 仕様で、名前空間に加えて XmlTextReader XML 1.0 仕様も実装します。 この記事では、XML ドキュメント オブジェクト モデル (DOM) などのオブジェクト モデルを使用する代わりに、XML データへのトークン化された高速なストリーム アクセスを実行する方法について説明します。

この記事の Microsoft Visual C# .NET バージョンについては、「ファイルから XMLを読み取る方法」を参照Visual C#。

この記事では、クラス ライブラリの名前空間.NET Framework次の Microsoft を参照します。System.xml

要件

この記事では、次のトピックに精通している必要があります。

  • XML の用語
  • XML ファイルの作成方法と読み取り方法

次の一覧では、必要な推奨ハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、およびサービス パックの概要を示します。

  • Microsoft Visual Studio .NET
  • Microsoft Visual Studio 2005

ファイルから XML データを読み取る

この記事の例では、 という名前のファイル を使用 Books.xml。 独自のソフトウェア Books.xmlを作成するか、Microsoft .NET ソフトウェア開発キット (SDK) クイック スタートに含まれているサンプル ファイルを使用できます。 プロジェクト ファイルをプロジェクト フォルダーBooks.xmlコピーする必要があります。

ファイルから XML データを読み取る手順は次のとおりです。

  1. .NET 2002 Visual Studio .NET 2003、Visual Studio 2005 から開始Visual Studioします。

  2. [ファイル] メニューの [新規] をポイントし、[プロジェクト] をクリックします。

    [ 新しいプロジェクト] ダイアログ ボックスが表示されます。

  3. [プロジェクト Project] で、[プロジェクト]をVisual C++クリックします

    注意

    2005 Visual Studioでは、Visual C++プロジェクト が [Visual C++]に変更Visual C++。

  4. [テンプレート]、[.NET 2002] を使用している場合はVisual Studio C++ アプリケーションをクリックします。

    [テンプレート] で、[.NET 2003] を使用している場合は、[コンソール アプリケーション (.NET) Visual Studioクリックします。

    [テンプレート]、[CLR コンソール アプリケーション] をクリックします (2005 Visual Studioします。

  5. [名前]ボックスに*「Q815658」* と入力し 、[OK] をクリックします

  6. プロジェクトに参照 System.xml.dll を追加します。 マネージ プロジェクトに参照を追加する方法の詳細については、「Visual C++プロジェクトへの参照の追加 」をVisual C++してください。

  7. 名前空間で using ディレクティブを次 System::Xml のように指定します。

    using namespace System::Xml;
    

    この操作を行って、後でコードでクラス宣言を XmlTextReader 修飾する必要が生じないので、この操作を行います。 他の宣言の前に using ディレクティブを使用する必要があります。

  8. オブジェクトのインスタンスを作成 XmlTextReader します。 オブジェクトに XmlTextReader オブジェクトファイルを.xmlします。

    通常、クラスは、DOM のオーバーヘッドなしで生の XML データにアクセスする必要がある XmlTextReader 場合に使用されます。 したがって、クラス XmlTextReader は XML データをより速く読み取る方法を提供します。 クラス XmlTextReader は、XML constructors データの場所を指定する異なります。

    次のコードでは、クラスのインスタンスを作成し、クラス XmlTextReader ファイルをBooks.xmlします。 関数に次のコードを追加 _tmain します。

    XmlTextReader* reader = new XmlTextReader ("books.xml");
    

    注意

    2005 Visual C++では、 _tmain 関数は main 関数に変更されます。

  9. XML データを読み取る。

    注意

    この手順では、外側の while ループ を示 します。 この手順に従う 2 つの手順では 、while ループを使用して XML データを読み取る方法を示します。

    オブジェクトを作成した XmlTextReader 後、Read メソッドを使用して XML データを読み取る。

    Read メソッドは、Read メソッドがファイルの末尾に達するまで、.xml ファイル内を順次移動します。 Read メソッドがファイルの末尾に達すると、Read メソッドは false を返します。

    while (reader->Read())
    {
        // Do some work here on the data.
        Console::WriteLine(reader->Name);
    }
    
  10. ノードを調べる。

    XML データを処理するために、各レコードには、プロパティから決定できるノードの種類 NodeType があります。 プロパティ Name とプロパティは Value 、現在のノードまたは現在のレコードに関する次の情報を返します。

    • 要素名と属性名であるノード名。
    • ノードテキストであるノード値。

    列挙 NodeType は、ノードの種類を決定します。 次のコード サンプルでは、要素の名前とドキュメントの種類を表示します。 次のコード サンプルでは、要素の属性は無視されます。

    while (reader->Read())
    {
        switch (reader->NodeType)
        {
            case XmlNodeType::Element: // The node is an element.
                Console::Write("<{0}", reader->Name);
                Console::WriteLine(">");
                break;
            case XmlNodeType::Text: //Display the text in each element.
                Console::WriteLine (reader->Value);
                break;
            case XmlNodeType::EndElement: //Display the end of the element.
                Console::Write("</{0}", reader->Name);
                Console::WriteLine(">");
                break;
        }
    }
    
  11. 属性を調べる。

    要素ノードの種類には、要素ノードの種類に関連付けられている属性ノードの一覧を含めできます。 メソッド MovetoNextAttribute は、要素内の各属性を順番に移動します。 このプロパティ HasAttributes を使用して、ノードに属性が含されているかどうかをテストします。 プロパティ AttributeCount は、現在のノードの属性の数を返します。

    while (reader->Read())
    {
        switch (reader->NodeType)
        {
            case XmlNodeType::Element: // The node is an element.
                Console::Write("<{0}", reader->Name);
    
                while (reader->MoveToNextAttribute()) // Read the attributes.
                    Console::Write(" {0}='{1}'", reader->Name, reader->Value);
                Console::WriteLine(">");
                break;
            case XmlNodeType::Text: //Display the text in each element.
                Console::WriteLine (reader->Value);
                break;
            case XmlNodeType::EndElement: //Display the end of the element.
                Console::Write("</{0}", reader->Name);
                Console::WriteLine(">");
                break;
        }
    }
    
  12. ソリューションを保存します。 ソリューションをビルドします。

  13. Ctrl + F5 キーを押してサンプル アプリケーションを実行します。

.NET 2002 または .NET 2003 Visual Studioの完全なコード 一覧Visual Studio表示する

#include "stdafx.h"
#include <tchar.h>

#using <mscorlib.dll>
#using <System.xml.dll>

using namespace System;
using namespace System::Xml;

void _tmain(void)
{
    XmlTextReader* reader = new XmlTextReader ("books.xml");

    while (reader->Read())
    {
        switch (reader->NodeType)
        {
            case XmlNodeType::Element: // The node is an element.
                Console::Write("<{0}", reader->Name);
  
                while (reader->MoveToNextAttribute()) // Read the attributes.
                    Console::Write(" {0}='{1}'", reader->Name, reader->Value);
                Console::WriteLine(">");
                break;
            case XmlNodeType::Text: //Display the text in each element.
                Console::WriteLine (reader->Value);
                break;
            case XmlNodeType::EndElement: //Display the end of the element.
                Console::Write("</{0}", reader->Name);
                Console::WriteLine(">");
                break;
        }
    }
    Console::ReadLine();
}

注意

前のコード サンプルを正常にコンパイルするには、Visual C++ 2005 で共通言語ランタイム サポート コンパイラ オプション ( /clr:oldSyntax ) を追加する必要があります。 2005 年に共通言語ランタイム サポート コンパイラ オプションVisual C++するには、次の手順を実行します。

  1. [プロパティ Project] をクリックし、[プロパティ] を <ProjectName> クリックします。

    注意

    <ProjectName> は、プロジェクトの名前のプレースホルダーです。

  2. [構成 プロパティ] を展開 し、[全般] を クリックします

  3. 右ウィンドウの [共通言語ランタイム サポート] プロジェクト設定で 、[共通言語ランタイム サポート] 、古い構文 (/clr:oldSyntax) をクリックして選択し、[適用] をクリックし 、[OK] をクリックします。

    共通言語ランタイム サポート コンパイラ オプションの詳細については 、「/clr (Common Language Runtime Compilation)」を参照してください

これらの手順は記事全体に適用されます。

サンプル出力の表示

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

トラブルシューティング

サンプル アプリケーションを実行すると、次のエラー メッセージが表示されることがあります。

例外の種類の未処理の例外System.Xml.Xml例外が発生しましたSystem.xml.dll追加情報: システム エラー。

関連情報

XmlReader を使用して XML を読み取る方法の詳細については、「XmlReader を使用して XML を読み取 る」を参照してください