今回のテーマ
こんにちは、サルモリです。
今回はXmlファイルを読み込んでLinqで好きな形にしていこう!
という趣旨のブログを書いていきます。
C#では、Xmlファイルの扱いが比較的充実しているので、何回か分けて記事を書いていこうと思っています。
私もXmlファイルの扱い方は結構忘れがちなので、一緒に勉強していくつもりで記事を書いていきます!!
それでは、ソースコードを書いていきます!!
今回使用する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ファイルの読み込み
早速、Xmlファイルを読み込んでみましょう。読み込むためのメソッドはLoadメソッドです。
下記のソースコードを見てください。
1 2 3 4 5 6 7 8 9 10 11 |
using System; using System.Xml.Linq; class Program { static void Main(string[] args) { var xdoc = XDocument.Load("Robot.xml"); Console.WriteLine(xdoc); } } |
出力結果
<robotlists>
<robotlist>
<name>Rockman</name>"
<maker>Dr_Light</maker>"
<color>Blue</color>"
</robotlist>
<robotlist>
以下略・・・・
Robol.xmlファイル内の全ての内容を読み込めました。Loadの戻り値はXDocument型で内容を保持できます。
要素の取得
続けて、要素の取得を行います。XDocumentオブジェクトを生成したら、Root.Elementsメソッドで、
ルート直下にある要素を全て取得します。
戻り値はIEnumerable<XElement>型なので、Linqなど自由に扱うことが出来ます。
今回はnameの要素を出力するソースコードにしてみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
using System; using System.Xml.Linq; class Program { static void Main(string[] args) { var xdoc = XDocument.Load("Robot.xml"); var xelements = xdoc.Root.Elements(); foreach(var robotlist in xelements) { Console.WriteLine(robotlist.Element("name").Value); } } } |
出力結果
Rockman
Rockchan
Fireman
Iceman
Airman
想定通りに「name」の要素のみ取得できました。
foreachでは、XElement型を一つずつ取り出し、
Elementメソッドを使用することで、「name」の要素を取得しています。
「name」実際の文字列の要素を得るにはValueプロパティを使用しましょう。
Linqを組み合わせた例
最後にRoot.Elements()で受け取った戻り値に対して、Linqを使って行く例を見てみましょう。
今回のソースコードでは、Selectメソッドで名前を抜き出し、OrderByメソッドで並び替えを行いました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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 xelementname = xelements.Select(n => n.Element("name").Value).OrderBy(n => n).ToList(); foreach(var robotlist in xelementname) { Console.WriteLine(robotlist); } } } |
出力結果
Airman
Fireman
Iceman
Rockchan
Rockman
Linqのメソッドについては下記の記事を参考にしてください。
こちらもCHECK
-
【C# sharp Linq】Distinct、OrderBy、OrderByDescendingメソッドを解説します。
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る
こちらもCHECK
-
【C# sharp Linq】クラスを定義してSelectメソッドを使おう。
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る
Linqを自由に使えるので、使いたい値にするのも簡単ですね。
まとめ
今回はxmlの読み込みについて解説していきました。今回使用したメソッドは下記です。
今回使用したメソッド
- Load
- Root.Elements
- Element
Root.Elementsメソッドによって、Linqが使い放題の型にしてくれるので、
Xmlファイルの扱いが各段に楽になりました。
Xmlファイルに関しては、他にも沢山記事を書いてくので、楽しみにしててください。
それでは、最後まで見て頂きありがとうございました。
Xmlの読み込みに関して、新しい記事を書きました。
こちらもご覧ください。
こちらもCHECK
-
【C# sharp Linq】Xmlファイルの要素の追加、削除、修正方法
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る