首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Foreach循环XmlNodeList

Foreach循环XmlNodeList
EN

Stack Overflow用户
提问于 2012-08-07 22:15:39
回答 7查看 73.2K关注 0票数 19

目前我有以下代码:

代码语言:javascript
复制
XmlDocument xDoc = new XmlDocument();
xDoc.Load("http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=twitter");

XmlNodeList tweets = xDoc.GetElementsByTagName("text");
foreach (int i in tweets)
{
    if (tweets[i].InnerText.Length > 0)
    {
         MessageBox.Show(tweets[i].InnerText);
    }
}

这是不起作用的,它给我在每一行上的System.InvalidCastException

下面的代码运行得很好(no foreach,i被替换为零):

代码语言:javascript
复制
XmlDocument xDoc = new XmlDocument();
xDoc.Load("http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=twitter");

XmlNodeList tweets = xDoc.GetElementsByTagName("text");

if (tweets[0].InnerText.Length > 0)
{
     MessageBox.Show(tweets[0].InnerText);
}
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-08-07 22:21:24

tweets是一个节点列表。我认为你想要做的是:

代码语言:javascript
复制
XmlDocument xDoc = new XmlDocument();
xDoc.Load("http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=twitter");

XmlNodeList tweets = xDoc.GetElementsByTagName("text");
for (int i = 0; i < tweets.Count; i++)
{
    if (tweets[i].InnerText.Length > 0)
    {
        MessageBox.Show(tweets[i].InnerText);
    }
}
票数 29
EN

Stack Overflow用户

发布于 2012-08-07 22:45:00

我知道已经有了一个标记的答案,但是你可以像你第一次尝试时那样做,你只需要用XmlNode替换int

代码语言:javascript
复制
XmlDocument xDoc = new XmlDocument();
xDoc.Load("http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=twitter");

XmlNodeList tweets = xDoc.GetElementsByTagName("text");
foreach (XmlNode i in tweets)
{
    if (i.InnerText.Length > 0)
    {
         MessageBox.Show(i.InnerText);
    }
}
票数 30
EN

Stack Overflow用户

发布于 2012-08-07 22:21:00

它不是Int类型,这就是你得到一个强制转换异常的原因。您可以用适当的类型替换int,也可以简单地使用type inference (implicitly typed variables)来处理它。在这里我使用typeinference.by表示类型为var,编译器将理解它是tweets集合中的迭代器变量的类型

代码语言:javascript
复制
foreach (var i in tweets)
{
    if (i!=null)
    {
      string tweet= (((System.Xml.XmlElement)(i))).InnerText;
      MessageBox.Show(tweet);
     }
}

编辑:使用出色的LINQtoXML,您的代码可以像这样重写。

代码语言:javascript
复制
string url = "http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=twitter";
XElement elm = XElement.Load(url);
if (elm != null)
{              
    foreach (var status in elm.Elements("status"))
    {
        string tweet = status.Element("text").Value;
        MessageBox.Show(ss);
    }
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11847965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档