Visual C# を使用してファイルから XML を読み取る方法

Microsoft Visual Basic .NET 版のこの資料には、 301225を参照してください。


この資料は、次の Microsoft.NET Framework クラス ライブラリの名前空間を参照します。
  • System.Xml

概要

この資料では、拡張マークアップ言語 (XML) をファイルから読み取る、 XmlTextReaderクラスを使用する方法について説明します。XmlTextReaderは、直接解析および XML 実装して、XML 1.0 仕様とから World Wide Web コンソーシアム (W3C) XML 仕様の名前空間のトークンを提供します。この資料など、XML ドキュメント オブジェクト モデル (DOM) オブジェクト モデルを使用するのではなく、XML ストリームをトークン化された、高速アクセスを提供します。

要件

推奨されるハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、および必要な service pack は次をとおり。
  • Microsoft Visual Studio 2005 または Microsoft Visual Studio .NET
この資料は次のトピックに精通している事を前提としています。
  • XML の用語集
  • XML ファイルの作成と読み込み

ファイルから XML を読み取る方法

次の使用例はBooks.xml という名前のファイルを使用します。Books.xml ファイルを作成または次のフォルダーに .NET ソフトウェア開発キット (SDK) のクイック スタートに含まれているサンプル ファイルを使用できます。
\Program Files\Microsoft Visual Studio の .NET\FrameworkSDK\Samples\QuickStart\Howto\Samples\Xml\Transformxml\Cs


\Bin\Debug フォルダーにこのプロジェクトを作成するフォルダーの下にある Books.xml をコピーする必要があります。Books.xml はダウンロードもできます。ダウンロードする場所は、「参照」を参照してください。

  1. Visual Studio 2005 または Visual Studio .NET を起動します。
  2. 新しい Visual C# コンソール アプリケーションを作成します。「完全なコード リスト」セクションに直接進んでまたはアプリケーションをビルドするには以下手順を続行します。
  3. System.Xml.dll アッセンブリへの参照がプロジェクトに含まれていることを確認します。
  4. 後続のコードでXmlTextReaderの宣言を修飾する必要はありませんように、 System.Xml名前空間にusingディレクティブを指定します。その他の宣言の前に、" using "ディレクティブを使用する必要があります。
    using System.Xml;
  5. XmlTextReaderオブジェクトのインスタンスを作成し、XML ファイルを設定します。XmlTextReaderクラスを DOM のオーバーヘッドなしの生のデータとして XML にアクセスする必要がある場合に使用する通常は、したがって、 XmlTextReaderクラスは、XML を読み取るためのより高速なメカニズムを提供します。XmlTextReaderクラスには、XML データの場所を指定する別のコンス トラクターがあります。次のコードは、 XmlTextReaderクラスのインスタンスを作成し、Books.xml ファイルを読み込みます。Class1 の Main プロシージャに次のコードを追加します。
    XmlTextReader reader = new XmlTextReader ("books.xml");
  6. XML を参照してください。(この手順は外側の"while"ループについて説明し、XML を読み取るためのループを使用する次の 2 つの手順をデモンストレーションことに注意してください)。XmlTextReaderオブジェクトを作成した後は、XML データを読み込むReadメソッドを使用します。Readメソッドが引き続きに到達するまで、ファイルの末尾に読み取りメソッドを返します。"False"の値をポイントする XML ファイルを順番に移動するには
    while (reader.Read()) {
    // Do some work here on the data.
    Console.WriteLine(reader.Name);
    }
    Console.ReadLine();

  7. ノードを調べます。XML データを処理するには、各レコードはNodeTypeプロパティから判断できるノードの種類が。名前のプロパティは、ノード名 (要素と属性名) と、現在のノード (またはレコード) のノード値 (ノード テキスト) を返します。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;
    }
    }

  8. 属性を調べます。要素ノード型では、それらに関連付けられた属性ノードのリストを含めることができます。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.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. 保存して、プロジェクトを閉じます。

完全なコード リスト

using System;using System.Xml;

namespace ReadXMLfromFile
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Class1
{
static void Main(string[] args)
{
XmlTextReader reader = new XmlTextReader ("books.xml");
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;
}
}
Console.ReadLine();
}
}
}

サンプル出力

<bookstore><book>
<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>
<title>
The Confidence Man
</title>
<author>
<first-name>
Herman
</first-name>
<last-name>
Melville
</last-name>
</author>
<price>
11.99
</price>
</book>
<book>
<title>
The Gorgias
</title>
<author>
<name>
Plato
</name>
</author>
<price>
9.99
</price>
</book>
</bookstore>

トラブルシューティング


コードをテストするとき、次の例外エラー メッセージが表示される可能性があります: 未処理の例外: System.Xml.XmlException: 予期しない XML 宣言です。XML 宣言は、ドキュメントの最初のノードである必要があり、その前に表示される空白文字は使用できません。



追加情報: システム エラーです。次のコード行で例外エラーが発生: 中
(reader.Read())

例外エラーは、無効な処理命令によって発生します。たとえば、処理命令には、余分なスペースがあります。無効な処理命令の例は次のとおりです。
<?xml version='1.0' ?>

この xml タグには、前のスペースが含まれて、' <' ブラケットです。エラーを解決する前の空白を削除します。

参照

次のファイルが Microsoft ダウンロード センターからダウンロードできます。
.NET Framework の XML クラスおよび C# の詳細については、次の Microsoft Developer Network (MSDN) Web サイトを参照してください。
XmlReaderクラスの詳細については、次の MSDN Web サイトを参照してください。
XmlReaderを使用して、XML データの読み取り方法の詳細については、次の MSDN Web サイトを参照してください。
プロパティ

文書番号:307548 - 最終更新日: 2017/02/01 - リビジョン: 1

Microsoft Visual C# 2008 Express Edition, Microsoft Visual C# 2005, Microsoft Visual C# .NET 2002 Standard Edition

フィードバック