簡単な例でLinQ to XMLを説明します。 環境LinQ to XML利用するために .NET Framework 3.5以上が必要となります。 利用する名前空間 using System.Xml.Linq; using System.Xml.Serialization; たとえば、実行カレントディレクトリに、以下のXMLファイルがあります。 <?xml version="1.0" encoding="utf-8"?> <Restaurants> <Restaurant> <Id>1</Id> <Name>本格中華シグマ飯店</Name> <Address>東京都中央区</Address> <Point>80</Point> </Restaurant> <Restaurant> <Id>2</Id> <Name>インドカレー シデック</Name> <Address>東京都中央区</Address> <Point>70</Point> </Restaurant> <Restaurant> <Id>3</Id> <Name>ラーメン 七味屋</Name> <Address>東京都新宿区</Address> <Point>50</Point> </Restaurant> </Restaurants> XMLの情報を読み込むため、以下のエンティティクラスを定義する public class Restaurant { //レストランのID public int Id { set; get; } //レストランの名前 public string Name { set; get; } //住所 public string Address { set; get; } //レストランの評価点数 public int Point { set; get; } } 条件指定でノードを取得する。 //Xmlファイルを開く using (StreamReader reader = new StreamReader("Restaurants.xml")) { //List<Restaurant>型のシリアライザを生成する XmlSerializer serializer = new XmlSerializer(typeof(List<Restaurant>)); //Xmlファイルからデシリアライズする IEnumerable<Restaurant> list = (List<Restaurant>)serializer.Deserialize(reader); var node = list.Where(r => r.Id == id); } XDocumentを利用する方法 XDocument d = null; using (StreamReader sr = new StreamReader("Restaurants.xml")) { d = XDocument.Load(sr); var ele = d.Descendants("Restaurant").Where(x => x.Attribute("id").Value == "2").Single(); //属性の値を設定する ele.SetAttributeValue("id", "12"); //新しいノード追加する XElement node1 = new XElement("料理", new XAttribute("番号", "1"), new XAttribute("種類", "イタリアン"), new XElement("雰囲気", "★★★★☆"), new XElement("値段", "★★★☆☆"), new XElement("待つ時間", "★★★☆☆")); ele.Add(node1); //ノードを削除する var deEele = d.Descendants("Restaurant").Where(x => x.Attribute("id").Value == "10").Single(); deEele.Remove(); //新しいノード追加する ele = d.Descendants("Restaurant").Where(x => x.Attribute("id").Value == "4").Single(); XElement node2 = new XElement("評価", new XElement( "雰囲気", new XElement("値段", "★★★☆☆"), new XElement("待つ時間", "★★★☆☆") ) ); ele.Add(node2); } d.Save("AttRestaurants.xml"); 上記の方法だと、ノードを削除する場合、空の要素が残されないです。 中古車買取実績No.1ガリバー コメント: |