現在、私は次のコードを持っています:
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
foreach行。
次のコードは完全に機能します(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);
}
ツイートはノードリストです。あなたがやろうとしているのはこれだと思う:
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);
}
}
楽しい、
。私はすでにマークされた答えがあることを知っていますが、最初の試行で行ったようにあなたはそれを行うことができます、あなたはちょうどintを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);
}
}
Int
タイプではありません。これが、キャスト例外を受け取る理由です。 intを適切な型に置き換えるか、単に 型推論(暗黙的に型指定された変数) を使用してこれを処理できます。ここでは、タイプをtypeinference
と言うことで、var
を使用しています。コンパイラは、それがtweets
コレクションのイテレータ変数のタイプであることを理解します
foreach (var i in tweets)
{
if (i!=null)
{
string Tweet= (((System.Xml.XmlElement)(i))).InnerText;
MessageBox.Show(Tweet);
}
}
EDIT: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);
}
}
すべての答えは少し時代遅れのようです Imperative ので、宣言的なものを追加します。これはOPが望んでいたことをしていませんが、あなたがポイントを得ると確信しています。
public static List<System.Xml.XmlNode> toList(System.Xml.XmlNodeList nodelist){
List<System.Xml.XmlNode> nodes = new List<System.Xml.XmlNode>();
foreach (System.Xml.XmlNode node in nodelist)
{
nodes.Add(node);
}
return nodes;
}
public static ReadMeObject setXml(ReadMeObject readmeObject){
readmeObject.xmlDocument = new System.Xml.XmlDocument();
readmeObject.xmlDocument.LoadXml("<body>"+readmeObject.htmlStringContent+"</body>");
System.Xml.XmlNodeList images = readmeObject.xmlDocument.SelectNodes("//img");
Array.ForEach(
Functions.toList( images )
.Where((image) => image.Attributes != null)
.Where((image) => image.Attributes["src"] != null)
.Where((image) => image.Attributes["src"].Value != "")
.ToArray()
, (image) => {
Console.WriteLine(image.Attributes["src"].Value);
}
);
return readmeObject;
}
foreach (XmlNode node in tweets)
{
if (tweets[i].InnerText.Length > 0)
{
MessageBox.Show(tweets[node].InnerText);
}
}
使用できない「I」を、リストの1行を選択するXmlNodeに変更しました。