2014年05月15日

C#でXMLから情報を取り出す

   このエントリーをはてなブックマークに追加 Clip to Evernote
どう書く?orgに感謝を込めて」シリーズ その7


■問題 (出題者:にしお さん) 
指定されたURL「http://ja.doukaku.org/feeds/comments/」をGETするとXML文字列が手に入ります。このXML文字列がすでに入手できてdataという変数に代入されているとします。このdataから、以下のような表記で書き込まれている「更新日時」を取り出すコードを書いてください。 <lastBuildDate>Thu, 12 Jul 2007 09:42:50 -0000</lastBuildDate>

C#で書いたコード
using System.Linq;
using System.Xml.Linq;

namespace Doukaku.Org {
    class Program {
        static void Main(string[] args) {
            XDocument xdoc = XDocument.Load("http://ja.doukaku.org/feeds/comments/");
            xdoc.Save("test.xml");
            var q = xdoc.Root.Descendants()
                .Where(e => e.Name == "lastBuildDate")
                .Select(e => e.Value);
            q.ToList().ForEach(Console.WriteLine);
        }
    }
}
なお、このこのURLには今となってはアクセスできません。 そのため、別のXMLを使うコードも書いてみました。GreatPersons.xml内のName要素を抜き出す サンプルコードです。
using System.Linq;
using System.Xml.Linq;


namespace XMLから情報を取り出す {
    class Program {
        static void Main(string[] args) {
            // Descendants を使って、とりあえず、Nameはすべて取り出す。
            XDocument xdoc = XDocument.Load("GreatPersons.xml");
            var q = xdoc.Root.Descendants()
                .Where(e => e.Name == "Name")
                .Select(e => e.Value);
            q.ToList().ForEach(Console.WriteLine);
            Console.ReadLine();

            // Person要素のNameを取り出す。
            var q2 = xdoc.Root.Elements("Person")
                         .Select(e => e.Element("Name").Value);
            q2.ToList().ForEach(Console.WriteLine);
            Console.ReadLine();
        }
    }
}
<?xml version="1.0" encoding="utf-8" ?>
<GreatPersons>
  <Person>
    <Name>坂本竜馬</Name>
    <BirthYear>1835</BirthYear>
  </Person>
  <Person>
    <Name>勝海舟</Name>
    <BirthYear>1823</BirthYear>
  </Person>
</GreatPersons>
  

Posted by gushwell at 22:30Comments(0)TrackBack(0)

2010年01月14日