C# で XML を読み取る方法

C De Xml Wo Dumi Quru Fang Fa



インターネット データ共有に広く使用されているデータ形式は XML です。これは、データを XML に保存し、柔軟で使いやすい方法でシステム間で交換できるためです。 C# では、XML ファイルの読み取りは一般的なタスクであり、.NET Framework は、XML ファイルを解析して読み取るためのさまざまなクラスとメソッドを提供します。この投稿では、.NET Framework を利用して C# で XML を読み取る方法について説明します。

C# で XML を読み取る

C# で XML ファイルを読み取る方法はいくつかありますが、それぞれの方法に長所と短所があり、選択はプロジェクトの要件によって異なります。以下に、C# で XML ファイルを読み取るいくつかの方法を示します。

以下は私が作成した XML ファイルの内容で、今後のメソッドのデモンストレーションに使用されます。







< ?xml バージョン = 「1.0」 エンコーディング = 「utf-8」 ? >
< 従業員 >
< 職員 >
< ID > 1 ID >
< 名前 > サム・ボッシュ 名前 >
< デパートメント > マーケティング デパートメント >
< 給料 > 50000 給料 >
職員 >
< 職員 >
< ID > 2 ID >
< 名前 > ジェーン・ドウ 名前 >
< デパートメント > ファイナンス デパートメント >
< 給料 > 60000 給料 >
職員 >
< 職員 >
< ID > 3 ID >
< 名前 > ジェームス 名前 >
< デパートメント > 人事 デパートメント >
< 給料 > 70000 給料 >
職員 >
従業員 >

1: XmlDocument の使用

C# で XML ファイルを読み取るには、XmlDocument クラスまたは XDocument クラスを使用できます。どちらも System.Xml 名前空間の一部です。 XmlDocument クラスは XML を読み取るための DOM (Document Object Model) アプローチを提供するのに対し、XDocument クラスは LINQ (Language-Integrated Query) アプローチを提供します。次に、XmlDocument クラスを使用して XML ファイルを読み取る例を示します。



システムを使用する;
System.Xml を使用します。

クラスプログラム
{
静的ボイドメイン ( [ ] 引数 )
{
XmlDocument ドキュメント = 新しい XmlDocument ( ) ;
doc.Load ( 「従業員.xml」 ) ;

XmlNodeList ノード = doc.DocumentElement.SelectNodes ( 「/従業員/従業員」 ) ;

フォーリーチ ( XmlNode node ノード )
{
ID = ノード.SelectSingleNode ( 「ID」 ) .InnerText;
文字列名 = ノード.SelectSingleNode ( '名前' ) .InnerText;
文字列部門 = ノード.SelectSingleNode ( 'デパートメント' ) .InnerText;
文字列給与 = ノード.SelectSingleNode ( '給料' ) .InnerText;
Console.WriteLine ( 「ID: {0}、名前: {1}、部署: {2}、給与: {3}」 ID 、名前、部署、給料 ) ;
}
}
}

このコードは、XmlDocument クラスを使用して XML ファイルを読み込み、SelectNodes メソッドを使用して従業員ノードのリストを取得します。次に、従業員ノードごとに、SelectSingleNode メソッドを使用して ID、名前、部門、給与の子ノードの値を取得し、Console.WriteLine を使用してそれらを表示します。







2: XDocument の使用

あるいは、XDocument クラスを使用して、LINQ アプローチで XML ファイルを読み取ることもできます。以下のコードは、その方法を示しています。

システムを使用する;

クラスプログラム
{
静的ボイドメイン ( [ ] 引数 )
{
XDocument ドキュメント = XDocument.Load ( 「従業員.xml」 ) ;

フォーリーチ ( XElement 要素 doc.子孫 ( '職員' ) )
{
整数 ID = int.Parse ( 要素.要素 ( 「ID」 ) 。価値 ) ;
文字列名 = 要素.要素 ( '名前' ) 。価値;
文字列部門 = 要素.要素 ( 'デパートメント' ) 。価値;
int 給与 = int.Parse ( 要素.要素 ( '給料' ) 。価値 ) ;
Console.WriteLine ( $ 「ID: {id}、名前: {name}、部署: {Department}、給与: {salary}」 ) ;
}
}
}

XML ファイルは、XDocument.Load メソッドを使用して XDocument オブジェクトにロードされます。 XML ファイルの「従業員」要素はすべて、Descendants 手法を使用して取得されます。各要素について、その子要素には Element メソッドを使用してアクセスし、その値は Value プロパティを使用して抽出されます。最後に、抽出されたデータがコンソールに出力されます。



XDocument は System.Xml.Linq 名前空間に属しているため、C# ファイルの先頭に次の using ステートメントを含める必要があることに注意してください。

3: XmlReader の使用

XmlReader は、C# で XML ファイルを読み取るための高速かつ効率的な方法です。ファイルを順次読み取ります。つまり、一度に 1 つのノードのみをロードするため、メモリ内での処理が困難な大きな XML ファイルを操作するのに最適です。

システムを使用する;
System.Xml を使用します。

クラスプログラム
{
静的ボイドメイン ( [ 引数 )
{
使用して ( XmlReader リーダー = XmlReader.Create ( 「従業員.xml」 ) )
{
その間 ( リーダー.読み取り ( ) )
{
もしも ( Reader.NodeType == XmlNodeType.Element && リーダー.名前 == '職員' )
{
Console.WriteLine ( 「ID:」 + Reader.GetAttribute ( 「ID」 ) ) ;
Reader.ReadToDescendant ( '名前' ) ;
Console.WriteLine ( '名前: ' + Reader.ReadElementContentAsString ( ) ) ;
Reader.ReadToNextSibling ( 'デパートメント' ) ;
Console.WriteLine ( 'デパートメント: ' + Reader.ReadElementContentAsString ( ) ) ;
Reader.ReadToNextSibling ( '給料' ) ;
Console.WriteLine ( '給料: ' + Reader.ReadElementContentAsString ( ) ) ;
}
}
}
}
}

この例では、XmlReader.Create メソッドを使用して XmlReader のインスタンスを作成し、XML ファイルのパスをパラメーターとして渡します。次に、while ループを使用して、XmlReader の Read メソッドを使用して XML ファイルをノードごとに読み取ります。

ループ内では、まず、XmlReader の NodeType プロパティと Name プロパティを使用して、現在のノードが従業員要素であるかどうかを確認します。その場合、GetAttribute メソッドを使用して id 属性の値を取得します。

次に、ReadToDescendant メソッドを使用して、リーダーを従業員要素内の name 要素に移動します。次に、ReadElementContentAsString 関数を使用して、name 要素の値を取得します。

同様に、ReadToNextSibling メソッドを使用してリーダーを次の兄弟要素に移動し、部門要素と給与要素の値を取得します。

最後に、using ブロックを使用して、XML ファイルの読み取り終了後に XmlReader オブジェクトが適切に破棄されるようにします。

4: XML から LINQ へ

C# で LINQ to XML を使用して XML ファイルを読み取ることは、XML データにアクセスして操作するための強力な方法です。 LINQ to XML は、XML データを操作するためのシンプルで効率的な API を提供する LINQ テクノロジのコンポーネントです。

システムを使用する;
System.Linq を使用します。
System.Xml.Linq を使用します。

クラスプログラム
{
静的ボイドメイン ( [ 引数 )
{
XDocument ドキュメント = XDocument.Load ( 「従業員.xml」 ) ;

var 従業員 = e から doc.子孫 ( '職員' )
選択する 新しい
{
ID = e.Element ( 「ID」 ) 。価値、
名前 = e.Element ( '名前' ) 。価値、
部門 = e.Element ( 'デパートメント' ) 。価値、
給与 = e.Element ( '給料' ) 。価値
} ;
フォーリーチ ( var従業員 従業員 )
{
Console.WriteLine ( $ 「ID: {employee.Id}、名前: {employee.Name}、部門: {employee.Department}、給与: {employee.Salary}」 ) ;
}
}
}

このコードでは、まず XDocument.Load() メソッドを使用して XML ファイルを読み込みます。次に、LINQ to XML を使用して XML データをクエリし、各従業員要素の id、名前、部門、給与要素を選択します。このデータを匿名型で保存し、結果をループして従業員情報をコンソールに出力します。

5: XPathの使用

XPath は、XML ドキュメント内を移動して特定の要素、属性、ノードを見つけるために使用されるクエリ言語です。これは、XML ドキュメント内の情報の検索とフィルタリングに効果的なツールです。 C# では、XPath 言語を使用して XML ファイルからデータを読み取り、抽出できます。

システムを使用する;
System.Xml.XPath を使用します。
System.Xml を使用します。

クラスプログラム
{
静的ボイドメイン ( [ ] 引数 )
{
XmlDocument ドキュメント = 新しい XmlDocument ( ) ;
doc.Load ( 「従業員.xml」 ) ;

// ドキュメントから XPathNavigator を作成する
XPathNavigator nav = doc.CreateNavigator ( ) ;

// XPath式をコンパイルする
XPath式 = nav.コンパイル ( 「/従業員/従業員/名前」 ) ;

// 式を評価し、結果を反復処理します。
XPathNodeIterator イテレータ = nav.Select ( ) ;
その間 ( iterator.MoveNext ( ) )
{
Console.WriteLine ( iterator.Current.Value ) ;
}
}
}

このコードは、XmlDocument を使用して「employees.xml」ファイルを読み込み、そのドキュメントから XPathNavigator を作成し、 要素の下にあるすべての 要素を選択する XPath 式をコンパイルします。次に、式を評価して結果を反復処理し、各 要素の値を出力します。

ノート: XPath の使用は、XML ドキュメントから要素と属性を選択するための強力かつ柔軟な方法ですが、これまで説明してきた他の方法よりも複雑になる可能性もあります。

結論

XmlDocument クラスを使用すると、完全な DOM 操作機能が提供されますが、他のメソッドよりも遅くなり、メモリの消費量が多くなる可能性があります。 XmlReader クラスは、高速、前方専用、非キャッシュのストリームベースのアプローチを提供するため、大きな XML ファイルを読み取る場合に適したオプションです。 XDocument クラスは、よりシンプルで簡潔な構文を提供しますが、XmlReader ほどパフォーマンスが優れない可能性があります。さらに、LINQ to XML および XPath メソッドは、XML ファイルから特定のデータを抽出するための強力なクエリ機能を提供します。