LINQ to XML

LINQtoXMLを勉強したってほどでもないんだけど、さわりだけLINQtoXMLをしてみた。

最初の感想は、まず、楽だなぁー

次に、んー流れわかりにくい。

エラー処理考えると結局コード長くなるよね?

って感じ。

サンプルとしては、http://xml.nig.ac.jp/index_jp.htmlAPIを利用して、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(それがいいかどうかは別にして。)