.NET Framework

簡単な例で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");

上記の方法だと、ノードを削除する場合、空の要素が残されないです。



セシウム137を97.7%吸着

コメント:



(画像の文字列を入力して下さい)

トップ   編集 凍結 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019/12/02 (月) 12:33:15 (1627d)

G|Cg|C@Amazon Yahoo yV

z[y[W yVoC[UNLIMITȂ1~] COiq COsیI