次の方法で共有


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

この記事では、 XmlTextReader クラスを使用して URL から XML を読み取る方法について説明します。 ストリーミングされた情報は、サーバーからのバイト ストリーム、ファイル、 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) クイック スタートに含まれているサンプル ファイルを使用することもできます。 このファイルはダウンロードすることもできます。ダウンロード場所については、この記事の References セクションの最初の項目を参照してください。

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

  2. Visual Studio を開きます。

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

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

    using System.Xml;
    
  5. URL を使用して XML ストリームを取得します。 ストリームは、デバイスからの独立を提供するために使用されます。したがって、ストリームのソースが変更された場合、プログラムの変更は必要ありません。 http://localhost/books.xml URL の定数を宣言します。 次の手順では、 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 を読み取る。

    Note

    この手順では、基本的な外部 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 プロパティから決定できるノードの種類があります。 NameプロパティとValue プロパティは、現在のノード (またはレコード) のノード名 (要素と属性名) とノード値 (ノード テキスト) を返します。 NodeType列挙は、ノードの種類を決定します。 次のサンプル コードは、要素の名前とドキュメントの種類を表示します。

    Note

    次の使用例は、要素属性を無視します。

    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.dll追加情報: 予期しない XML 宣言で、System.Xml.XmlException 型のハンドルされない例外が発生しました。 XML 宣言はドキュメントの最初のノードである必要があり、その前に空白文字を使用することはできません。 行 1、位置 4。

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

while (reader.Read())

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

関連情報