Visual C# を使用して URL から XML データを読み取る

この記事では、 クラスを使用して URL から XML を XmlTextReader 読み取る方法について説明します。 ストリーミングされた情報は、サーバー、ファイル TextReader 、クラスからのバイト ストリームなど、あらゆる種類のソースから取得できます。

元の製品バージョン: Visual Studio
元の KB 番号: 307643

要件

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

  • Microsoft Visual Studio
  • XML 用語
  • XML の作成と読み取り
  • URL と XML エンドポイントの作成

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

URL から XML データを読み取る方法

この例では、 という名前のファイル Books.xml使用します。 独自の Books.xml ファイルを作成することも、.NET Software Development Kit (SDK) クイック スタートに含まれているサンプル ファイルを使用することもできます。 このファイルはダウンロードすることもできます。ダウンロード場所については、この記事の 「参照」 セクションの最初の項目を参照してください。

  1. Books.xml ファイルをコンピューター上の\Inetpub\Wwwrootフォルダーにコピーします。

  2. Visual Studio を開きます。

  3. 新しい Visual C# コンソール アプリケーションを作成します。 [ コード一覧の完了 ] セクションに進むか、次の手順を続行してアプリケーションをビルドできます。

  4. コードの後半でクラス宣言を System.Xml 修飾 XmlTextReader する必要がないように、名前空間に using ディレクティブを指定します。 他の宣言の前に using ディレクティブを使用する必要があります。

    using System.Xml;
    
  5. URL を使用して XML ストリームを取得します。 ストリームは、デバイスからの独立性を提供するために使用されます。そのため、ストリームのソースが変更された場合、プログラムの変更は必要ありません。 URL の定数を http://localhost/books.xml 宣言します。 次の手順 XmlTextReaderでは、 で 定数を使用します。 次のコード サンプルを既定のクラスのメイン プロシージャに追加します。

    String URLString = "http://localhost/books.xml";
    
  6. クラスのインスタンスを XmlTextReader 作成し、URL を指定します。 通常は、 XmlTextReader ドキュメント オブジェクト モデル (DOM) のオーバーヘッドなしで XML に生データとしてアクセスする必要がある場合に使用されます。そのため、 XmlTextReader XML を読み取るためのメカニズムが高速になります。 クラスには XmlTextReader 、XML データの場所を指定するためのさまざまなコンストラクターがあります。 次のコードでは、オブジェクトのインスタンスを XmlTextReader 作成し、URL をコンストラクターに渡します。

    XmlTextReader reader = new XmlTextReader (URLString);
    
  7. XML を読み取る。

    注:

    この手順では、基本的な外部 while ループを示し、次の 2 つの手順では、そのループを使用して XML を読み取る方法について説明します。

    読み込まれた後、 XmlTextReader 連続した読み取りを実行して XML データ間を移動し、 メソッドを Read 使用して次のレコードを取得します。 これ以上レコードがない場合、メソッドは Read false を返します。

    while (reader.Read())
    {
        // Do some work here on the data.
        Console.WriteLine(reader.Name);
    }
    Console.ReadLine();
    
  8. ノードを検査します。 XML データを処理するために、各レコードには、 プロパティから決定できるノードの種類があります NodeType 。 プロパティと Value プロパティはName、現在のノード (またはレコード) のノード名 (要素と属性名) とノード値 (ノード テキスト) を返します。 NodeType列挙はノードの種類を決定します。 次のサンプル コードでは、要素の名前とドキュメントの種類が表示されます。

    注:

    この例では、要素属性を無視します。

    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 the end of the element.
                Console.Write("</" + reader.Name);
                Console.WriteLine(">");
                break;
        }
    }
    
  9. 属性を調べます。 要素ノードの種類には、それらに関連付けられている属性ノードの一覧を含めることができます。 メソッドは MovetoNextAttribute 、 要素内の各属性を順番に移動します。 ノードに HasAttributes 属性があるかどうかをテストするには、 プロパティを使用します。 プロパティは AttributeCount 、現在のノードの属性の数を返します。

    while (reader.Read())
    {
        switch (reader.NodeType)
        {
            case XmlNodeType.Element: // The node is an element.
                Console.Write("<" + reader.Name);
    
                while (reader.MoveToNextAttribute()) // Read the 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 the end of the element.
                Console.Write("</" + reader.Name);
                Console.WriteLine(">");
                break;
        }
    }
    
  10. プロジェクトをビルドして実行します。

完全なコード一覧

using System;
using System.Xml;

namespace ReadXMLfromURL
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
        static void Main(string[] args)
        {
            String URLString = "http://localhost/books.xml";
            XmlTextReader reader = new XmlTextReader (URLString);

            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                    case XmlNodeType.Element: // The node is an element.
                        Console.Write("<" + reader.Name);

                        while (reader.MoveToNextAttribute()) // Read the 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 the end of the element.
                        Console.Write("</" + reader.Name);
                        Console.WriteLine(">");
                        break;
                }
            }
        }
    }
}

出力例

<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 は、追加情報: 予期しない XML 宣言 system.xml.dll で発生しました。 XML 宣言はドキュメント内の最初のノードである必要があり、その前に空白文字を表示することはできません。 行 1、位置 4。

例外エラーは、次のコード行で発生します。

while (reader.Read())

例外エラーを解決するには、 Books.xml ドキュメントの最初のノードの前にある空白文字を削除します。

関連情報