検索結果のダウンロード
PubMedから検索結果をXMLフォーマットでダウンロード。
検索結果をダウンロードするには、検索結果ページの右上にある「Send to」をクリック、「File」を選択し、Formatを「XML」にして「Create File」をクリック。
「pubmed_result.xml」という名前のファイルがダウンロードされる。
データ(PMID、アブストラクト)を取得
using System; using System.Text; using System.Xml.Linq; using System.IO; using System.Diagnostics; using System.Xml; using System.Collections.Generic; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.WriteLine("ファイル名を入力してください"); string s; s = Console.ReadLine(); Stopwatch watch = new Stopwatch(); watch.Start(); using (StreamWriter sw = new StreamWriter("PMID.txt", false, Encoding.GetEncoding("shift_jis"))) { foreach (XElement el in mystream(s)) { sw.WriteLine(el.Element("MedlineCitation").Element("PMID").Value); } } using (StreamWriter sw2 = new StreamWriter("Absts.txt", false, Encoding.GetEncoding("shift_jis"))) { foreach (XElement el2 in mystream(s)) { string Absts = ""; foreach(XElement x2 in el2.Descendants("AbstractText")) { Absts = Absts + x2.Value; } sw2.WriteLine(Absts); } } watch.Stop(); Console.WriteLine("経過時間の合計 = {0}", watch.Elapsed); Console.ReadLine(); } static IEnumerable<XElement> mystream(string file_name) { XmlReaderSettings settings = new XmlReaderSettings(); settings.DtdProcessing = DtdProcessing.Parse; using (XmlReader reader = XmlReader.Create(file_name, settings)) { while (reader.Read()) { if (reader.Name == "PubmedArticle") { yield return XElement.ReadFrom(reader) as XElement; } } } } } }
データ(PMID、アブストラクト)を取得(アブストラクトがない文献は除く)
C#を使用
using System; using System.Text; using System.Xml.Linq; using System.IO; using System.Diagnostics; using System.Collections.Generic; using System.Xml; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.WriteLine("ファイル名を入力してください"); string s; s = Console.ReadLine(); Stopwatch watch = new Stopwatch(); watch.Start(); StreamWriter pmid = new StreamWriter("PMID.txt", false, Encoding.GetEncoding("shift_jis")); StreamWriter absts = new StreamWriter("Absts.txt", false, Encoding.GetEncoding("shift_jis")); foreach (XElement el in mystream(s)) { string Absts = ""; foreach (XElement x2 in el.Descendants("AbstractText")) { Absts = Absts + x2.Value; } if (Absts != "") { pmid.WriteLine(el.Element("MedlineCitation").Element("PMID").Value); absts.WriteLine(Absts); } } pmid.Close(); absts.Close(); watch.Stop(); Console.WriteLine("経過時間の合計 = {0}", watch.Elapsed); Console.ReadLine(); } static IEnumerable<XElement> mystream(string file_name) { XmlReaderSettings settings = new XmlReaderSettings(); settings.DtdProcessing = DtdProcessing.Parse; using (XmlReader reader = XmlReader.Create(file_name, settings)) { while (reader.Read()) { if (reader.Name == "PubmedArticle") { yield return XElement.ReadFrom(reader) as XElement; } } } } } }
注意
FTPサイトからダウンロードしたXMLではアブストラクトに改行が含まれている場合がある。
書き込む前に以下の1行が必要。
Absts = Absts.Replace("\r", "").Replace("\n", "");
以下は参考までに過去記事のコピー(1)
using System; using System.Linq; using System.Windows.Forms; using System.Xml.Linq;
結合
XDocument xdoc1 = XDocument.Load("http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&mode=XML&id=14993493"); XDocument xdoc2 = XDocument.Load("http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&mode=XML&id=15919696"); xdoc1.Element("PubmedArticleSet").Add(xdoc2.Element("PubmedArticleSet").Element("PubmedArticle")); xdoc1.Save("merge_file.xml");
消去
XDocument doc = XDocument.Load("http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&mode=XML&id=14993493+15919696+21974702+21303965"); var n = doc.Element("PubmedArticleSet").Elements("PubmedArticle").ToArray(); foreach(XElement d in n){ if (d.Element("MedlineCitation").Element("PMID").Value == "21974702") { d.Remove(); } } doc.Save("removo_file.xml");
新規作成
XDocument doc = new XDocument(); XElement rootElem = new XElement("PubmedArticleSet"); doc.Add(rootElem); doc.Save("newfile.xml");
XSLファイルと関連付ける
XslCompiledTransform xslt = new XslCompiledTransform(); xslt.Load("myxslt.xsl"); xslt.Transform("sample.xml", "sample.html");
以下は参考までに過去記事のコピー(2)
文献数を確認する
using System.Xml.Linq; XDocument xdoc = XDocument.Load("pubmed_result.xml"); MessageBox.Show(xdoc.Descendants("PMID").Count().ToString());
IDを表示する
using System.Xml.Linq; XDocument xdoc = XDocument.Load("pubmed_result.xml"); foreach (var xid in xdoc.Descendants("PMID")) { MessageBox.Show(xid.Value); }