LINQ to XML
LINQtoXMLを勉強したってほどでもないんだけど、さわりだけLINQtoXMLをしてみた。
最初の感想は、まず、楽だなぁー
次に、んー流れわかりにくい。
エラー処理考えると結局コード長くなるよね?
って感じ。
サンプルとしては、http://xml.nig.ac.jp/index_jp.htmlのAPIを利用して、DDBJ(DNA Data Bank of Japan)から配列データを引っ張ってきた。Web API for BiologyのページにC#のサンプルがある。
実際には、コンソールだとこんな感じでもいけた。
using System; using System.IO; using System.Net; using System.Text; public class Test { static void Main() { string url = "http://xml.nig.ac.jp/rest/Invoke"; url += "?service=DDBJ&method=getXMLEntry&accession=AB000200"; Encoding enc = Encoding.GetEncoding("euc-jp"); WebRequest req = WebRequest.Create(url); req.Method = "POST"; WebResponse res = req.GetResponse(); Stream st = res.GetResponseStream(); StreamReader sr = new StreamReader(st, enc); string html = sr.ReadToEnd(); sr.Close(); st.Close(); Console.WriteLine(html); } }
これをIDを入力できるようにしたり、配列部分だけやJournalを取り出すようにしたテストプログラム作った。(文字コードに関しては調べてないよ。DDBJは日本語とか登録できるの?)
ひっぱってきた配列がXMLなので、LINQtoXMLでそれなりに楽に処理できます。
SEQUENCEタグだけ抽出。
REFERENCEタグだけ抽出。
実は、ここでつまった!!
IDによって、REFERENCEタグのauthorsタグがないのとかあるので、それのエラー処理が、LINQ内でどこに書けばいいのか。。。
selectで処理しようとすると、nullでエラーがでるので、結局、selectは淡白なままで、foreach内でifで処理しちゃった。
なんか、LINQ使いこなせてないなーw
いまさら、Web APIで遊ぶってのもなんだろうけど、なかなか楽しい。NCBIのデータも引っ張れたので、なにか作ろうかな。PubMedのデータを引っ張って、新規の論文タイトルをTwitterにポストするぐらいならすぐ作れる。
昔なら、論文整理ソフト(PDFとPubMedのデータ紐付け)なんかほしかったけどね。今は、ネットのソーシャル ブックマークとかもあるし、整理するより、そのつど検索&最低限DLって感じなのでしょうか?しかし、趣味の物は別にして、ソーシャル ブックマークは日本人には向いてないと思うw(それがいいかどうかは別にして。)