C#のLINQ to XMLは様々なことが出来て素晴らしいですが、出来ることが多すぎてやりたいことを見つけられない時もあるので(贅沢な悩み)、備忘としてまとめました。ここではXML要素の追加・変更・削除、および対象要素の存在チェックについて書きます。
下記XMLの構造でコーディング例を記載していきます。なおnameがキー、positionが値という使い方です。つまり要素(XElement)だけで、属性(XAttribute)は使ってません。属性の場合もちゃんとメソッドありますが、今回は割愛します。
<?xml version="1.0" encoding="utf-8"?> <presets> <preset> <name>ルートレター</name> <position>144,822,1560,208</position> </preset> <preset> <name>ネットハイ</name> <position>89,444,650,68</position> </preset> <preset> <name>ダンガンロンパV3</name> <position>366,838,1356,168</position> </preset> </presets>
要素の存在チェック
// XMLファイルの読み込み var xDoc = XDocument.Load(@"setting.xml"); // 対象Name要素のカウント取得 var emp = xDoc.Descendants("preset") .Where(x => x.Element("name").Value == "Name名"); if (emp.Count() > 0) { // nameが存在する→更新 } else { // nameが存在しない→追加 }
要素の追加
// XMLファイルの読み込み var xDoc = XDocument.Load(@"setting.xml"); // 追加したい要素 var elem = new XElement("preset", new XElement("name", "Name名"), new XElement("position", "Positionの内容") ); // 要素を追加 xDoc.Elements().First().Add(elem); // XMLの上書き保存 xDoc.Save(@"setting.xml");
要素の更新
// XMLファイルの読み込み var xDoc = XDocument.Load(@"setting.xml"); // 要素の取得 var emp = (from p in xDoc.Descendants("preset") where p.Element("name").Value == "Name名" select p).Single(); // 値を変更 emp.Element("position").Value = "Positionの内容"; // XMLの上書き保存 xDoc.Save(@"setting.xml");
要素の削除
// XMLファイルの読み込み var xDoc = XDocument.Load(@"setting.xml"); // 要素の取得 var emp = ( from p in xDoc.Descendants("preset") where p.Element("name").Value == "Name名" select p).Single(); // 要素を削除 emp.Remove(); // XML保存 xDoc.Save(@"setting.xml");
C#でDOMを使ってた時に比べると、かなり気軽にXMLを扱えるようになって便利でいいですね。もっと勉強して、便利な使い方を把握しておこうかと思います。
コメント