Visual C++ を使用してファイルから XML データを読み取る

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

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

概要

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

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

この記事では、次の Microsoft .NET Framework クラス ライブラリ名前空間について説明します。System.xml

要件

この記事では、次のトピックについて理解していることを前提としています。

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

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

  • Microsoft Visual Studio .NET
  • Microsoft Visual Studio 2005

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

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

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

  1. Visual Studio .NET 2002、Visual Studio .NET 2003、または Visual Studio 2005 を起動します。

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

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

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

    注:

    Visual Studio 2005 では、 Visual C++ プロジェクトVisual C++ に変更されます。

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

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

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

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

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

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

    注:

    Visual C++ 2005 では、_tmain関数が メイン 関数に変更されます。

  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 。 プロパティと プロパティは NameValue 現在のノードまたは現在のレコードの次の情報を返します。

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

    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 キーを押して、サンプル アプリケーションを実行します。

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

#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) を追加する必要があります。 Visual C++ 2005 で共通言語ランタイム サポート コンパイラ オプションを追加するには、次の手順に従います。

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

    注:

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

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

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

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

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

サンプル出力を表示する

<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 型の未処理の例外。XmlException は、追加情報: システム エラー System.xml.dll 発生しました。

関連情報

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