LINQ系の内容は以下から見れます。よろしければご参照くださいませ。
以下、メモ書きです。
Linq to XMLがどんなものか知りたかったので、ちょっとサンプルつくってみました。
便利ですね〜やっぱり。XMLの操作が大分楽になります。
コアとして利用するクラスは以下のものです。
System.Xml.Linq.XElement
以下のサンプルでは、ファイルからの処理とストリームからの処理を記述しています。
まずは、テストデータが入っているXMLファイル。
<?xml version="1.0" encoding="utf-8" ?> <persons> <person> <name>gsf_zero1</name> <age>28</age> </person> <person> <name>gsf_zero2</name> <age>29</age> </person> <person> <name>gsf_zero3</name> <age>30</age> </person> <person> <name>gsf_zero4</name> <age>31</age> </person> <person> <name>gsf_zero5</name> <age>32</age> </person> <person> <name>gsf_zero6</name> <age>33</age> </person> </persons>
んで、サンプルプログラムです。
// vim:set ts=4 sw=4 et ws is nowrap ft=cs: using System; using System.IO; using System.Linq; using System.Xml.Linq; namespace Gsf.Samples.CSharp { /// <summary> /// Linq to Xmlのサンプルプログラム-01 /// </summary> /// <remarks> /// XElementの使用のサンプルです。 /// </remarks> public class EntryPoint { static void Main() { // // XMLデータをロードし、ageが30以上のデータのみを抽出。 // 抽出したデータのnameの値を表示する。 // // // XMLデータをファイルから読み込み抽出. // var result = from person in XElement.Load("TestData.xml").Elements() where ( (int) person.Element("age")) >= 30 select person.Element("name").Value; foreach (var name in result) { Console.WriteLine(name); } // // XMLデータをストリームから読み込み抽出. // var result2 = from person in XElement.Load(CreateSampleXml()).Elements() where ( (int) person.Element("age")) >= 30 select person.Element("name").Value; foreach (var name in result2) { Console.WriteLine(name); } Console.ReadLine(); } static TextReader CreateSampleXml(){ // // 以下のXML構造を作成する。 // // ルート要素:persons // 直下の要素:person // person内の要素1:name (string) // person内の要素2:age (int) // XElement root = new XElement("persons"); for(int i = 0; i < 6; i++){ XElement person = new XElement("person"); person.Add(new XElement("name", string.Format("gsf_zero{0}", (i + 1).ToString()))); person.Add(new XElement("age", (28 + i))); root.Add(person); } ///////////////////////////////////////////////////// // // 戻り値となるストリームを構築する。 // MemoryStream stream = new MemoryStream(); // // 文字列データを一気に書き込む為にTextWriterを利用する。 // StreamWriter writer = new StreamWriter(stream); writer.Write(root.ToString()); writer.Flush(); // // データが書き込まれたので、シーク位置を先頭に戻す。 // stream.Position = 0; return new StreamReader(stream); } } }
実行すると、どちらの場合も
gsf_zero3 gsf_zero4 gsf_zero5 gsf_zero6
と表示されます。
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場