Foreach循环XmlNodeList

Dev*_*tor 17 c# foreach xmldocument

目前我有以下代码:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,它给了我System.InvalidCastExceptionforeach线.

以下代码完美地工作(没有foreach,i被替换为零):

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);
}
Run Code Online (Sandbox Code Playgroud)

ebu*_*gos 27

tweets是一个节点列表.我认为你要做的是这样的:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

请享用,


小智 25

.我知道已经有一个明显的答案,但你可以像你在第一次尝试时那样做,你只需要用XmlNode

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);
    }
}
Run Code Online (Sandbox Code Playgroud)


Shy*_*yju 5

它不是Int类型,这就是你获得转换异常的原因.您可以使用适当的类型替换int,或者只使用类型推断(隐式类型变量)来处理此问题.在这里我使用typeinference.by说类型为var,编译器将理解它是tweets集合中的迭代器变量的类型

foreach (var i in tweets)
{
    if (i!=null)
    {
      string tweet= (((System.Xml.XmlElement)(i))).InnerText;
      MessageBox.Show(tweet);
     }
}
Run Code Online (Sandbox Code Playgroud)

编辑:使用Wonderful LINQtoXML,您的代码可以像这样重写.

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);
    }
}
Run Code Online (Sandbox Code Playgroud)