XMLからDOMを構築して、Xpathで読むのはMasayoshi’s Blog – C# Express を使ってみよう : XML DOM超入門が詳しい。参考になった。
もうちょっといじって、このblogのindex.xml(rss2.0)を読む簡単なRSSリーダーを作ってみた。
コンソールだけど。
XMLを直接DOMのまま扱うのはちょっと面倒臭いので、まずDOMを普通のオブジェクトに読み込む。
RSSアイテム1つ(エントリ1つの事)を格納するクラスを用意しておく
classRssItem
{
publicstringtitle,description,link,guid,category,pubDate;
}
このRssItemをArrayListに詰め込んで管理する。
使うのはSystem.Xml.XmlDocument, XmlNodeList, XmlNode
XmlNode.InnerTextは .Valueでもいいけど、中身がXMLの場合Valueは何も返してくれないのでInnerTextで。
中にXMLノードがさらにあるかどうかは XmlNode.HasChildNodesで確認できる。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Xml;
usingSystem.Collections;namespaceReadXmlTest
{
///
///DOMをオブジェクトの配列にしてから処理する
///
classProgram
{
staticvoidMain(string[]args)
{
Console.WriteLine(“—start—“);stringurl=”http://web.sfc.keio.ac.jp/~shokai/index.xml”;
XmlDocumentxml=newXmlDocument();
Console.WriteLine(“loadingxml:”+url);
xml.Load(url);//XML読み込みstringxpath=”/rss/channel/item”;//
Console.WriteLine(“xpath:”+xpath);ArrayListrssItems=newArrayList();//RSSのアイテムリスト
XmlNodeListnodeList=xml.SelectNodes(xpath);//XpathでDOMを辿る
foreach(XmlNodenodeinnodeList)
{
RssItemrssItem=newRssItem();//RSSアイテムを1つ格納するオブジェクト
foreach(XmlNodeterminal_nodeinnode)
{
//RSSのアイテムをオブジェクトに格納する
switch(terminal_node.Name)
{
case”title”:
rssItem.title=terminal_node.InnerText;
break;
case”description”:
rssItem.description=terminal_node.InnerText;
break;
case”link”:
rssItem.link=terminal_node.InnerText;
break;
case”guid”:
rssItem.guid=terminal_node.InnerText;
break;
case”category”:
rssItem.category=terminal_node.InnerText;
break;
case”pubDate”:
rssItem.pubDate=terminal_node.InnerText;
break;
}
}
rssItems.Add(rssItem);
}
Console.WriteLine(rssItems.Count+”個のRSSItem取得”);foreach(RssItemiinrssItems)//RSSアイテムの中身1つずつ取り出してみる
{
Console.WriteLine(“***”);
Console.WriteLine(i.title);
Console.WriteLine(i.link);
Console.WriteLine(i.pubDate);
}
Console.WriteLine(“—endofresult—¥r¥n¥r¥n”);
Console.ReadLine();//コンソールがすぐ消えない様に、入力待ち
}
}
}