今回のテーマ
こんにちは、サルモリです。今回のテーマはXmlファイルを読み込んだ後に内容を保持する方法を解説します。
下記の2つのやり方について、解説していきます。
Xmlの内容を保持する方法
- 匿名クラスに内容を保持する方法
- クラスを作成して内容を保持する方法
今回はLinqのSelectメソッドを使用した方法を紹介します。
Selectメソッドを使用すると、foreachなどを書かずに実現することが出来るので、1文で処理を書くことができます。
覚えておくと大変便利なので、ぜひXmlファイルを読み込む処理を書く場合は、LinqのSelectメソッドを使用することも検討してください。
今回は下記の記事の続きです。まだ読んでいない方は下記の記事から見ると、理解しやすいと思います。
こちらもCHECK
-
【C# sharp Linq】Load、Root.Elementsを使用したXmlファイルの読み込み方法
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る
それでは、今回もやっていきましょう!!
今回使用するXmlファイル
今回読み込むファイルは下記のXmlファイルです。名前は「Robot.xml」で、プログラムと同様のカレントディレクトリに置いてます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?xml version="1.0" encoding="utf-8"?> <robotlists> <robotlist> <name>Rockman</name>" <maker>Dr_Light</maker>" <color>Blue</color>" </robotlist> <robotlist> <name>Rockchan</name>" <maker>Dr_Light</maker>" <color>Pink</color>" </robotlist> <robotlist> <name>Fireman</name>" <maker>Dr_Wily</maker>" <color>Red</color>" </robotlist> <robotlist> <name>Iceman</name>" <maker>Dr_Wily</maker>" <color>Blue</color>" </robotlist> <robotlist> <name>Airman</name>" <maker>Dr_Wily</maker>" <color>Blue</color>" </robotlist> </robotlists> |
匿名クラスを作成して保持する方法
まずは匿名クラスを作成して保持するソースコードを書いていきます。
内容を匿名クラスに保持し、Xmlファイルの各要素、「name」、「maker」、「color」の内容を出力するソースコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using System; using System.Linq; using System.Xml.Linq; class Program { static void Main(string[] args) { var xdoc = XDocument.Load("Robot.xml"); var xelements = xdoc.Root.Elements(); var robotlist = xelements.Select(n => new { Name = n.Element("name").Value, Maker = n.Element("maker").Value, Color = n.Element("color").Value }); foreach(var robot in robotlist) { Console.WriteLine("Name:" + robot.Name + " Maker:" + robot.Maker + " Color:" + robot.Color); } } } |
出力結果
Name:Rockman Maker:Dr_Light Color:Blue
Name:Rockchan Maker:Dr_Light Color:Pink
Name:Fireman Maker:Dr_Wily Color:Red
Name:Iceman Maker:Dr_Wily Color:Blue
Name:Airman Maker:Dr_Wily Color:Blue
Selectメソッドで、匿名クラスの生成を行うことにより、各要素を分かりやすい形で出力することが出来ています。
Selectメソッドについてはこちら
こちらもCHECK
-
【C# sharp Linq】クラスを定義してSelectメソッドを使おう。
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る
ロボットリストに、「Name」、「Maker」、「Color」の変数を定義し、呼び出しています。
匿名クラスは、Selectメソッドで下記のようにnewの後に名前を指定しないことで生成できます。
1 |
xelements.Select(n => new { |
次の紹介するクラスを定義する場合は、newの後にクラス名を指定することで生成できます。それでは見ていきましょう。
クラスを定義して内容を保持する方法
続けて、クラスを定義する方法です。まず、クラスを定義してあげましょう。
いつものRobotクラスで名前、開発者、色を保持するクラスです。Robotクラスはgetterとsetterを持っています。
1 2 3 4 5 6 |
class Robot { public string Name { get; set; } public string Maker { get; set; } public string Color { get; set; } } |
上記のロボットクラスを使用してオブジェクトとして要素を取りだしてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using System; using System.Linq; using System.Xml.Linq; class Program { static void Main(string[] args) { var xdoc = XDocument.Load("Robot.xml"); var xelements = xdoc.Root.Elements(); var robotlist = xelements.Select(n => new Robot{ Name = n.Element("name").Value, Maker = n.Element("maker").Value, Color = n.Element("color").Value }).ToList(); foreach(var robot in robotlist) { Console.WriteLine("Name:" + robot.Name + " Maker:" + robot.Maker + " Color:" + robot.Color); } } } |
出力結果
Name:Rockman Maker:Dr_Light Color:Blue
Name:Rockchan Maker:Dr_Light Color:Pink
Name:Fireman Maker:Dr_Wily Color:Red
Name:Iceman Maker:Dr_Wily Color:Blue
Name:Airman Maker:Dr_Wily Color:Blue
問題なくSelectメソッド内でRobotクラスを生成することができました。
匿名クラスを使用せずに行うメリットとしては、読み取った結果をメソッドの外側からも自由に取り出すことができます。
因みにLinqのSelectメソッドを使用しない場合だと下記のようなソースコードとなります。
比較すると、Selectメソッドで何やってるか分かりやすいかもしれませんね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
using System; using System.Collections.Generic; using System.Xml.Linq; class Program { static void Main(string[] args) { List<Robot> robotlist = new List<Robot>(); var xdoc = XDocument.Load("Robot.xml"); var xelements = xdoc.Root.Elements(); foreach(var xelement in xelements) { robotlist.Add(new Robot{ Name = xelement.Element("name").Value, Maker = xelement.Element("maker").Value, Color = xelement.Element("color").Value }); } foreach(var robot in robotlist) { Console.WriteLine("Name:" + robot.Name + " Maker:" + robot.Maker + " Color:" + robot.Color); } } } |
出力結果
Name:Rockman Maker:Dr_Light Color:Blue
Name:Rockchan Maker:Dr_Light Color:Pink
Name:Fireman Maker:Dr_Wily Color:Red
Name:Iceman Maker:Dr_Wily Color:Blue
Name:Airman Maker:Dr_Wily Color:Blue
まとめ
今回はXmlの内容を読み取り、内容を保持する方法を二つ紹介しました。
Selectメソッドを使用することで、簡単にできるのでぜひXmlを呼び出すときは検討してみてください。
最後まで記事を読んで頂き有難うございました。
ファイルについての記事はこちら