我正在构建一个需要运行XML feed的应用程序,但是我在获取某些元素方面遇到了一些麻烦.
我正在使用Twitter提要并想要浏览所有
元素.我可以很好地连接并从feed中获取内容但我无法弄清楚item
当我循环时如何只选择元素reader.Read();
.
谢谢你的帮助!
最简单的方法是使用XPath.示例要遵循.
string xml = @""; XPathDocument doc = new XPathDocument(new StringReader(xml)); XPathNavigator nav = doc.CreateNavigator(); // Compile a standard XPath expression XPathExpression expr; expr = nav.Compile("/rss/channel/item"); XPathNodeIterator iterator = nav.Select(expr); // Iterate on the node set try { while (iterator.MoveNext()) { XPathNavigator nav2 = iterator.Current.Clone(); nav2.MoveToChild("title",""); Console.WriteLine(nav2.Value); nav2.MoveToParent(); nav2.MoveToChild("pubDate",""); Console.WriteLine(nav2.Value); } } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.ReadKey(); Twitter public timeline http://twitter.com/public_timelineTwitter updates from everyone! en-us 40 yasu_kobayashi: rTwT: @junm : yayaya yasu_kobayashi: rTwT: @junm : yayaya Tue, 28 Oct 2008 12:04:48 +0000 http://twitter.com/yasu_kobayashi/statuses/978829930 http://twitter.com/yasu_kobayashi/statuses/978829930FreeGroup: WikiFortio - foobar http://tinyurl.com/5gvttf FreeGroup: WikiFortio - foobar http://tinyurl.com/5gvttf Tue, 28 Oct 2008 12:04:47 +0000 http://twitter.com/FreeGroup/statuses/978829929 http://twitter.com/FreeGroup/statuses/978829929
这是jan的方法
XmlDocument doc2 = new XmlDocument(); doc2.LoadXml(xml); XmlNode root = doc2.DocumentElement; foreach (XmlNode item in root.SelectNodes(@"/rss/channel/item")) { Console.WriteLine(item.SelectSingleNode("title").FirstChild.Value); Console.WriteLine(item.SelectSingleNode("pubDate").FirstChild.Value); }
替代:
// starts as in Vinko Vrsalovic 's answer // and not including decent eror handling XmlDocument doc = new XmlDocument(new StringReader(xml)); foreach (XmlNode item in doc.SelectNodes(@"/rss/channel/item")) { Console.WriteLine(item.SelectSingleNode("title").Value); Console.WriteLine(item.SelectSingleNode("pubDate").Value); }
我不知道这段代码是慢一点还是不好练习.请做评论.
我发现它比使用Navigator和Iterator的另一个更具可读性.
编辑:我使用Xml文档.像Vinko Vrsalovic的回答中的XPath文档不支持这种工作方式,但速度要快得多: (MSDN)