C#でxmlを読み込み方法を検索したら
方法がたくさん出てきて迷ってしまった…
xmlの中を見ても意味が分からない…
テキストファイルを読み込む時と同じ方法で読み込んでいいの?
xmlファイルって必要ある?
こんにちは!文系出身ながらも自力で勉強・実務をこなし、8年目に突入した現役プログラマの佐藤です。
みなさんはxmlをご存知ですか?使い方がわからなかったり、迷ったりして使用を諦めたりしていませんか?
見慣れないとxmlはちょっと難しそうと感じられるかもしれません。
テキストファイルと同じように読み込んでしまうと、xmlって一体なにが便利なんだろう?と思ってしまいますよね。
実は、xmlには専用の読み込み方があるんです。
ですが、専用の読み込み方はいろいろ存在します。どの方法を選んだらいいか迷ってるうちに、なんかもういいや…という気分になってしまいがちです。
そんな悩みを解決するべく、この記事では正しい読み書きの方法だけではなく、xmlファイル自体についても解説します。
どんなところで使われているのか、どこが便利なのかも含めてしっかり紹介していくので、読み終わる頃にはxmlがばっちり分かるようになりますよ!
そして、xmlファイル読み書きの方法の解説では、C#で読み書きを行う時の一番おすすめな方法を解説していきます。読み書きの方法がたくさんあって迷っている方も、今回紹介する方法で読み書きすれば大丈夫です!
また、xmlがどんなものなのか見たこともないという方もいらっしゃるかと思います。
この記事では、そんな初心者の方でもxmlを理解できるよう、基礎から分かりやすく解説していきます。
xmlファイルは、とっても便利なファイルです!知っていれば、圧倒的にプログラミングの幅が広がるので、一緒に学習していきましょう。
それでは早速、xmlの正体から解説していきます。
xml・xmlファイルとは
この章では、xmlとはなにか?xmlファイルとはなにか?ということから学習していきます。
初めて学習する方は難しそうと思うかもしれませんが、意外と簡単な仕組みなので怖がらずに一緒に見ていきましょう!
xmlはデータの内容や構造を表すことが出来る言語
xmlはExtensible Markup Languageの略で、マークアップ言語のひとつです。マークアップ言語は簡単に言うと、マークを付けることでデータを表現する言語のことです。HTMLもマークアップ言語のひとつなので、HTMLをご存知の方なら想像しやすいかもしれません。
そして、そのマークのことを「タグ」と呼びます。
次は簡単なxmlの例です。
<交通費>1200</交通費>
<交通費>と</交通費>の部分が「タグ」です。
タグは<〇〇>から始まり、</〇〇>で終わらせるのがルールです。
タグはデータの内容や、意味の目印になります。1200という数値は、交通費なんだとタグのおかげで分かりますよね。
このように、xmlはデータをタグで囲って意味を持たせることができる優れものなんです。タグを読めば、ほかの人が作ったxmlも何が書いてあるのかすぐにわかります。
次はそのxmlを使って書いたファイルについて詳しく解説していきます。
xmlファイルはデータを管理できるファイル
xmlファイルは、xmlで書かれているだけで普通のテキストファイルです。
テキストファイルなので、誰でも無料で作成できます。簡単なものならメモ帳でも、全く問題なく作成することができます。
ここからは実際のファイルをみて確認していきます。
みなさんも、一緒にxmlファイルを書いてみましょう!
<?xml version="1.0" encoding="Shift_JIS" ?> <チーム> <メンバー情報> <名前>佐藤</名前> <住所>北海道札幌市</住所> <年齢>28</年齢> </メンバー情報> <メンバー情報> <名前>山田</名前> <住所>東京都北区</住所> <年齢>30</年齢> </メンバー情報> </チーム>
今回は例としてチームのメンバー情報をxmlファイルにしました。
では中身について、詳しく見ていきましょう。
一行目はxmlファイルのお決まりの一文なので、必ず書きます。
次の行からはタグの中にタグが書かれていますよね。このように、xmlはタグの中にタグを追加することで、データにどんどん意味を付けることが出来ます。
この仕組みは階層構造とか、ツリー構造と呼ばれます。今回のデータを図で表現するとこんな感じです。
チームの中に、メンバー情報があり、更にその中に個人情報があるということです。
タグで上手く囲うことで、さっきの図の構造が文字で実現できていますよね。しかも、タグのおかげでデータの意味がわかりやすくなっています。
xmlファイルは、このように文字だけでデータの意味も、階層も表現出来る、すごいファイルです。
xmlを知っていれば、エクセルやデータベースが無くても、図のようなデータを保存しておけるファイルを作成することができちゃうんです。
中身を見ても内容がよく分からないときは、先ほどのような図で一度内容を書き直してみるとわかりやすくなります!
慣れれば、読むだけでもデータの内容や意味がピンとくるようになりますので、出来るだけたくさんのxmlに触れて慣れていきましょう。
以上で、xmlとxmlファイルの仕組みについてご紹介しました。
次にxmlの良いところを詳しく紹介しますので、こちらもしっかり学習していきましょう!
xmlファイルのメリットは?
先程の仕組みの説明の中でも、メリットが出てきていましたが、ここでは一つ一つ見ていきます!
まずは「タグを自由に決められる」ということです。
HTMLのタグは決まったタグしか使えませんが、xmlはタグを自由に決めることができます。
自由にタグが決められるので、どんなジャンルのデータでも表現出来ちゃうところは非常に便利ですよね。
次に「いろいろなシステム、環境で使える」ことです。
xmlファイルの書き方のルールは世界共通になっていて、ほとんどの言語でxmlファイルを読み書きする方法が用意されています。
また、普通のテキストファイルなのでOSが違っても、専用のソフトがなくても開くことが来ます。
このように、xmlファイルはシステム開発する時にも便利なファイルなんです!
最後は「データの種類を増やしやすい」ということです。
さっきのサンプルの個人情報に職業も追加したいな、と思ったときは職業タグを書き込むだけで簡単に追加できます。
実は、データの種類の追加のしやすさは機械にとっても大事なことです。
CSVファイルは順番でデータの種類を保存しているので、途中にデータの種類を追加されると読み込めなくなります。こうなると、もうプログラムを修正するしかありません。
xmlファイルは読み込みたい部分をタグで決めることが出来るので、内容が変更されても読み込めます。内容が変わってもプログラムを直さなくて済むので、xmlファイルは非常に重宝されているんです。
xmlファイルの良いところを3つ紹介しました。
人にとっても機械にとっても、便利なファイルなのが分かっていただけたでしょうか?
そんなxmlファイルが実際にはどのように使われてるのか、少しだけ見ていきましょう。
実際にはどのように使われている?
xmlファイルは、文字だけでいろいろなデータを表現することが出来るので、使われている場所は様々です。
皆さんが一番簡単に目にできるところだとRSSが代表的です。RSSはxmlで書かれていて、RSSリーダーと合わせて使われています。
単純に表形式のデータを保管しておきたい時にも、エクセルに保存せずxmlに保存する事もできます。
他には、システム間でのデータのやり取りによく使われています。システムの設定ファイルとして、実行時に読み込まれる事も非常に多いです。
とっても多種多様ですよね。
かなり幅広い場面で使うことができるファイルでなので、プログラミングしていく中でも、必ず読み書きをしなければならない場面が出てくると思います。
その時につまづかないよう、次の章からは読み書きについて解説していきます!
xmlファイルを使ってみる前に
読み書きの方法を検索したことがある方は、たくさん方法が出てきて迷ってしまったことがありませんか?
この章では、読み書き方法の選び方について解説します。
主流の読み書き方法は3つあり、それぞれにメリット・デメリットがあります。
まずは「DOMを使った方法」です。
DOMは「Document Object Model」の略で、XmlDocumentクラスを使って読み書きする方法です。
xmlファイルを一気に全て読み込んで記憶するので、何度もデータを検索したり、書き込んだりする場合に適しています。
デメリットは、全て読み込んで記憶するため、処理が他に比べて遅くなる事です。
次には「SAXを使った方法」です。
SAXは「Simple API for XML」の略で、XmlReaderクラスを使って読み込む方法です。書き込むときはXmlWriterクラスを使います。
ファイルの内容を記憶しないで一度だけ読み込むので、他に比べて処理が速めです。
デメリットは、先頭から読み込むため前の行には戻れないことです。何度も検索して、データを使いたい場合にSAXは使えません。
最後に「LINQを使った方法」です。
C#で開発するなら、使わないと損な機能ですよね。LINQ(リンク)は、非常にざっくり言うとSQLっぽい文章をC#コード上で使えるようにしてくれるものです。
LINQは他に比べて、とてもシンプルな書き方で読み書きすることができ、処理も早いです。
DOMとSAXのいいところを取ったような感じで、デメリットは特にありません。
LINQのほかの機能も詳しく学習したい方は、この使い方総まとめ記事をご覧ください。
正直なことを言うと、どれでも読み書きすることが出来ます。
ですが、C#での読み書きなら、デメリットがなく簡単に書ける「LINQを使った方法」をお勧めします。
この後は具体的な読み書きの方法を紹介していきますが、今回はおすすめのLINQを使った方法を紹介していきます。
読み書きの方法でお悩みの方は、次の章から解説する方法で実践してみてください!
もし、LINQ以外の方法を選ばなければいけなくなったときは、メリット・デメリットを確認して、その時にあった方法を選んでくださいね。
LINQでxmlファイルを読み込んでみる!
この章では、とうとうxmlファイルを実際に読み込んでみます!
サンプルコードがありますので、ぜひ一緒に実行して結果を見ていきましょう。
まずは基本の読み込み方
では、早速LINQでxmlファイルを読み込んでみましょう。
先程のサンプルファイルを使って、項目をコンソールに表示してみます。
using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; namespace Sample { class Program { static void Main(string[] args) { //xmlファイルを指定する XElement xml = XElement.Load(@"C:sample.xml"); //メンバー情報のタグ内の情報を取得する IEnumerable<XElement> infos = from item in xml.Elements("メンバー情報") select item; //メンバー情報分ループして、コンソールに表示 foreach (XElement info in infos) { Console.Write(info.Element("名前").Value + @","); Console.Write(info.Element("住所").Value + @","); Console.WriteLine(info.Element("年齢").Value); } Console.ReadKey(); } } }
実行結果:
佐藤,北海道札幌市,28 山田,東京都北区,30
たったこれだけで、メンバー情報が全て読み込めました!コードを詳しく解説していきます。
まずはLINQを使用するために、以下の通りにusingステートメントを追加しましょう。
using System.Linq; using System.Xml.Linq;
そして、開きたいxmlファイルのパスを指定します。名称だけでは読み込めないので、場所から指定しましょう。
次の部分が非常に重要な部分です!
//メンバー情報のタグ内の情報を取得する IEnumerable<XElement> infos = from item in xml.Elements("メンバー情報") select item;
Elementsと書いてあるところがタグの名称を指定するところです。リストに格納するような感じで、データが読み込まれます。
これが終わると、変数infosの中身が以下のようになっています!
infos[0]:
<メンバー情報> <名前>佐藤</名前> <住所>北海道札幌市</住所> <年齢>28</年齢> </メンバー情報>
infos[2]:
<メンバー情報> <名前>山田</名前> <住所>東京都北区</住所> <年齢>30</年齢> </メンバー情報>
しっかり2つのメンバー情報が読み込まれていますね!
そして最後に、foreach文を使い要素分をループしてコンソールに表示します。
それぞれのメンバー情報の中から、特定の要素を取り出したいときは「info.Element(“名前”).Value」とタグの名前を直接指定して取得しています。
思ったより簡単に読み込めてしまいましたね!このサンプルでは全件取り出しましたが、もちろん要素一つだけを取得することもできます。
次のサンプルを見てみてください。
using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; namespace Sample { class Program { static void Main(string[] args) { //xmlファイルを指定する XElement xml = XElement.Load(@"C:sample.xml"); //メンバー情報のタグ内の「名前」の情報を取得する IEnumerable<String> infos = from item in xml.Elements("メンバー情報").Elements("名前") select item.Value; //要素分ループして、コンソールに表示 foreach (String info in infos) { Console.WriteLine(info); } Console.ReadKey(); } } }
実行結果:
佐藤 山田
16行目が少し変わったのがわかるでしょうか?メンバー情報内の、名前の部分を全て取得しています。
//メンバー情報のタグ内の「名前」の情報を取得する IEnumerable<String> infos = from item in xml.Elements("メンバー情報").Elements("名前") select item.Value;
このように特定のタグの情報を取得することも非常に簡単に出来ます!
タグをそのまま指定することが出来るので、コードを書く時もわかりやすいですよね。
まずはこの方法でxmlファイルを読み込んでみて、仕組みに慣れていきましょう!
そして、LINQならではの要素として、データの条件を指定して読み込むことも可能です。
次はその方法を紹介していきます。
条件を指定する読み込み方
先程のサンプルコードには、「select」や「from」のSQL文っぽいものがありました。SQL文が分かる方なら、理解はすぐ出来ると思いますが、なんと読み込み時に「where」を指定することが出来ます。
SQL文での「where」というのは、簡単に言うとデータを取得する時に条件を指定することです。
実際につかってみましょう。このサンプルでは、住所が「北海道札幌市」のメンバーの「名前」をコンソールに表示してみます。
using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; namespace Sample { class Program { static void Main(string[] args) { //xmlファイルを指定する XElement xml = XElement.Load(@"C:sample.xml"); //「住所」が北海道札幌市であるメンバーの「名前」を取得する。 IEnumerable<String> infos = from item in xml.Elements("メンバー情報") where item.Element("住所").Value == "北海道札幌市" select item.Element("名前").Value; //メンバー情報分ループして、コンソールに表示 foreach (String info in infos) { Console.WriteLine(info); } Console.ReadKey(); } } }
実行結果:
佐藤
また、xmlファイルからデータを取得する部分が変わっていますね。ほかは先ほどのサンプルと変わりません。
//「住所」が北海道札幌市であるメンバーの「名前」を取得する。 IEnumerable<String> infos = from item in xml.Elements("メンバー情報") where item.Element("住所").Value == "北海道札幌市" select item.Element("名前").Value;
whereで条件の指定をしています!
「住所」タグの情報が「北海道札幌市」と一致する時と指定します。if文の条件を書くときに似ていますね!同じ感覚で条件を書いてみましょう。
そして、今回は名前を取得したかったので、「名前」タグの値を返すようにselectの部分で指定します。
これで、住所が「北海道札幌市」のメンバーの名前「佐藤」が表示されました!
条件の指定も、とても簡単ですよね。たくさんのデータをxmlファイルで管理しているときなどに、ぜひ使ってみてください!
そして、読み込むことが出来たので次は書き込んでみたいですよね。早速、基本の書き込み方から学習していきましょう!
LINQでxmlファイルに書き込んでみる!
この章では基本の書き込み方について紹介します。
読み込みが出来た皆さんなら、これも簡単にマスターできます!早速サンプルを使って学習していきましょう。
データの更新をする方法
xmlファイルの中のデータを更新する方法から紹介します。
サンプルファイルの、「佐藤」さんの「年齢」を29に更新してみます。
using System.Linq; using System.Xml.Linq; namespace Sample { class Program { static void Main(string[] args) { //xmlファイルを指定する XElement xml = XElement.Load(@"C:sample.xml"); //佐藤さんの情報を取得する XElement info = (from item in xml.Elements("メンバー情報") where item.Element("名前").Value == "佐藤" select item).Single(); //年齢を更新する info.Element("年齢").Value = "29"; //変更を保存する xml.Save(@"C:sample.xml"); } } }
実行結果(Sample.xml):
<?xml version="1.0" encoding="utf-8"?> <チーム> <メンバー情報> <名前>佐藤</名前> <住所>北海道札幌市</住所> <年齢>29</年齢> </メンバー情報> <メンバー情報> <名前>山田</名前> <住所>東京都北区</住所> <年齢>30</年齢> </メンバー情報> </チーム>
条件を指定して、データを取得しています。
データを取得しているときに使っている「Single」は、当てはまるデータが1つだけあるときに使用できます。2つ以上あるとエラーになるので注意して使用しましょう!
そして、変数の値を変更するように、年齢を更新します。
//年齢を更新する info.Element("年齢").Value = "29";
そして、その更新を最後の1文で保存しています。
//変更を保存する xml.Save(@"C:sample.xml");
始める時にはLoadで読み込みましたが、保存の時にはSaveを使います。分かりやすいですね!
この時も、xmlファイルの場所を指定して保存します。
同じ名前を指定すれば、上書きされます。もし、新しいxmlファイルとして保存したければ、次のように違う名前を指定してください。
//変更を保存する xml.Save(@"C:sample2.xml");
以上で、データの更新は完璧です!
今回はデータ1つだけの更新でしたが、もちろん一気にたくさんのデータを更新することもできます。基本は変わりませんので、まずはこの方法でxmlファイルのデータ更新をしてみましょう。
次は、データを新規追加したい時の方法です。
データを新規追加する方法
データを更新出来たら、次は新しくデータを入れる方法について学習しましょう!
サンプルファイルにメンバー情報を追加してみます。
using System.Xml.Linq; namespace Sample { class Program { static void Main(string[] args) { //xmlファイルを指定する XElement xml = XElement.Load(@"C:sample.xml"); //新しいメンバー情報を設定する XElement datas = new XElement("メンバー情報", new XElement("名前","田中"), new XElement("住所","大阪府大阪市"), new XElement("年齢","35")); //情報を追加する xml.Add(datas); //追加した情報を保存する xml.Save(@"C:sample.xml"); } } }
実行結果(Sample.xml):pre class=”theme:dark-terminal lang:default decode:true “><?xml version=”1.0″ encoding=”utf-8”?>
<チーム>
<メンバー情報>
<名前>佐藤</名前>
<住所>北海道札幌市</住所>
<年齢>29</年齢>
</メンバー情報>
<メンバー情報>
<名前>山田</名前>
<住所>東京都北区</住所>
<年齢>30</年齢>
</メンバー情報>
<メンバー情報>
<名前>田中</名前>
<住所>大阪府大阪市</住所>
<年齢>35</年齢>
</メンバー情報>
</チーム>
メンバー情報に田中さんが追加されましたね!
次の部分を詳しく見ていきましょう。
//新しいメンバー情報を設定する XElement datas = new XElement("メンバー情報", new XElement("名前","田中"), new XElement("住所","大阪府大阪市"), new XElement("年齢","35"));
new XElementで書き込むタグの名前と値を指定します。
いままでファイルになかった新規のタグ名を指定しても問題ありません。
メンバー情報タグの中にそれぞれのタグを書き込みたいので、メンバー情報タグの値を指定する部分にもnew XElementで書き込みたいタグを指定しています。データの構造図を思い出しながらタグとデータをしっかり設定していきましょう。
あとは、Addメソッドで設定した情報を追加し、それを保存すれば完了です!
以上で、xmlファイルに情報を追加したり変更したりすることが出来るようになりました。
こちらもLINQを使えば非常に楽に書くことが出来て便利ですよね。読み込みと合わせて、たくさん実践をして慣れていきましょう!
オブジェクトを直接xmlファイルにしてみる!
実は、オブジェクトをそのままxmlファイルとして保存する方法があります。
LINQでの読み書きに慣れたら、こちらの方法も学習してみましょう!
シリアライズとデシリアライズとは
オブジェクトの状態をシリアル化することがシリアライズといいます。
逆に、シリアル化したオブジェクトの状態を復元することをデシリアライズといいます。
専門用語をひとつひとつ解説していきます!
まず、オブジェクトの状態は、クラス変数や、プロパティです。
シリアル化とは、それを文字にして保存できるようにすることです。
実際にコードを見ながら確認していきます。次のようなクラスがあったとします。
public class SampleXmlData { public string name = "佐藤"; public string address = "北海道札幌市"; }
これを、シリアル化してxmlファイルに保存すると次のようになります。
<?xml version="1.0" encoding="utf-8"?> <SampleXmlData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <name>佐藤</name> <address>北海道札幌市</address> </SampleXmlData>
このように、変数の情報を丸ごとxmlなどに保存できるようにすることをシリアライズといいます。
このxmlファイルを読み込み、元のクラスに値を戻すことをデシリアライズといいます。
xmlで保存した設定ファイルを読み込んで、クラスに戻したり、保存する際などに非常に早くて便利な方法です。
雰囲気はつかめましたか?
シリアライズはクラスをテキストファイルに保存できる状態する。
というポイントだけをしっかり覚えておきましょう!
オブジェクトをシリアライズしてxmlファイルにしよう
では、具体的にどのようにしてシリアライズするのか解説していきます。
サンプルコードをまずは見てみましょう。
namespace Sample { public class Memberinfo { public string name; public string address; public string age; } class SampleMain { static void Main(string[] args) { //保存先のファイル名 string fileName = @"C:sample_serialize.xml"; //シリアライズするクラスのインスタンスを作成 Memberinfo serializeClass = new Memberinfo(); serializeClass.name = "佐藤"; serializeClass.address = "北海道札幌市"; serializeClass.age = "28"; //オブジェクトの型(今回はMemberinfo)を指定して、XmlSerializerを作成する。 XmlSerializer se = new XmlSerializer(typeof(Memberinfo)); //ファイルを開く StreamWriter sw = new StreamWriter(fileName, false, new System.Text.UTF8Encoding(false)); //シリアライズして保存 se.Serialize(sw, serializeClass); //ファイルを閉じる sw.Close(); } } }
実行結果(sample_serialize.xml):
<?xml version="1.0" encoding="utf-8"?> <Memberinfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <name>佐藤</name> <address>北海道札幌市</address> <age>28</age> </Memberinfo>
クラスの情報が丸ごとxmlファイルに変換することが出来ました。
思ったより書く量が少ないですよね。ポイントは次の部分です。
//オブジェクトの型(今回はMemberinfo)を指定して、XmlSerializerを作成する。 XmlSerializer se = new XmlSerializer(typeof(Memberinfo));
シリアライズするオブジェクトの型を指定して、XmlSerializerを作成します。XmlSerializerは指定したオブジェクトの型でシリアライズをしてくれるものです。
今回はMemberinfoの型でシリアライズしたいので、typeofメソッドを使いMemberinfoクラスの型を取得します。
あとは、Serializeメソッドに開いたファイルの情報と、インスタンス化したクラスを指定して保存すれば完成です。
最後に、開いたファイルはしっかり閉じましょうね!
プログラムで使う設定を一気に書き込むことができる、非常に便利な方法なので、ぜひマスターしてください!
次はシリアライズしたファイルを読み込んでクラスに戻してみましょう。
デシリアライズしてみよう
最後に、先程シリアライズして出力したxmlファイルを戻してみます。
こちらもサンプルコードをみて確認しましょう!
using System.Xml.Serialization; using System.IO; using System; namespace Sample { public class Memberinfo { public string name; public string address; public string age; } class SampleMain { static void Main(string[] args) { //保存先のファイル名 string fileName = @"C:sample_serialize.xml"; //オブジェクトの型(今回はMemberinfo)を指定して、XmlSerializerを作成する。 XmlSerializer se = new XmlSerializer(typeof(Memberinfo)); //ファイルを開く StreamReader sr = new StreamReader(fileName,new System.Text.UTF8Encoding(false)); //デシリアライズして復元 Memberinfo info = (Memberinfo)se.Deserialize(sr); //ファイルを閉じる sr.Close(); //コンソールに表示 Console.WriteLine(info.name); Console.WriteLine(info.address); Console.WriteLine(info.age); Console.ReadKey(); } } }
実行結果:
佐藤 北海道札幌市 28
先程シリアライズしたクラスに、値を戻すことが出来ました!シリアライズの時と同じように、型を指定してからXmlSerializerを作成します。
そして、次の部分でデシリアライズを行っています。
//デシリアライズして復元 Memberinfo info = (Memberinfo)se.Deserialize(sr);
戻したいクラスの型をかっこのなかに指定し、あとは作成したXmlSerializerのDeserializeメソッドを使いデシリアライズを行います。
この1文だけで、xmlファイルの内容を復元することが出来ました!設定ファイルを一気に読み込んで使うことが出来るので、こちらも非常に便利です。
方法はそこまで難しくないので、実際にシリアライズしてデシリアライズを行ってみて学習しましょう。
まとめ
xmlファイルについて解説してきました。
最初はなじみがなく、難しい印象だったかもしれませんが、ここまで学習してみてどうでしょうか?
意外と便利だな、使ってみたいなと思ってくれると筆者も嬉しいです。
読み書きの方法も、これでもう迷う必要はありません。
LINQを使っていろいろなxmlファイルを扱って、読み書きをマスターしましょう。
それでは、また次の解説で!