Linq到XML解析单个“状态”节点从twitter API
本文关键字:节点 twitter API 状态 XML 单个 Linq | 更新日期: 2023-09-27 18:08:06
好吧,我正在构建一个windows phone twitter应用程序,由于某种原因,我无法解析出这些数据。我只是想解析出一个状态…
这是来自twitter的xml数据…
<status>
<created_at>Sat Sep 10 17:59:12 +0000 2011</created_at>
<id>112585933307645952</id>
<text>AP: Start 'em/Sit 'em Week 1 - Arrowhead Pride (blog): Midwest Sports FansAP: Start 'em/Sit 'em Week 1Arrowhead ... http://t.co/rWnx5pe</text>
<source><a href="http://twitterfeed.com" rel="nofollow">twitterfeed</a></source>
<truncated>false</truncated>
<favorited>false</favorited>
<in_reply_to_status_id></in_reply_to_status_id>
<in_reply_to_user_id></in_reply_to_user_id>
<in_reply_to_screen_name></in_reply_to_screen_name>
<retweet_count>0</retweet_count>
<retweeted>false</retweeted>
<user>
<id>27680614</id>
<name>Fantasy Football</name>
<screen_name>hackhype</screen_name>
<location>Atlanta, GA</location>
<description>NFL News and Fantasy Perspective!</description>
<profile_image_url>http://a1.twimg.com/profile_images/509176461/icon_normal.gif</profile_image_url>
<profile_image_url_https>https://si0.twimg.com/profile_images/509176461/icon_normal.gif</profile_image_url_https>
<url>http://www.facebook.com/hackhype</url>
<protected>false</protected>
<followers_count>29888</followers_count>
<profile_background_color>ebebeb</profile_background_color>
<profile_text_color>333333</profile_text_color>
<profile_link_color>0084B4</profile_link_color>
<profile_sidebar_fill_color>ebebeb</profile_sidebar_fill_color>
<profile_sidebar_border_color>040470</profile_sidebar_border_color>
<friends_count>6789</friends_count>
<created_at>Mon Mar 30 17:01:37 +0000 2009</created_at>
<favourites_count>1</favourites_count>
<utc_offset>-18000</utc_offset>
<time_zone>Quito</time_zone>
<profile_background_image_url>http://a2.twimg.com/profile_background_images/44228452/twitterbackground.jpg</profile_background_image_url>
<profile_background_image_url_https>https://si0.twimg.com/profile_background_images/44228452/twitterbackground.jpg</profile_background_image_url_https>
<profile_background_tile>false</profile_background_tile>
<profile_use_background_image>true</profile_use_background_image>
<notifications>false</notifications>
<geo_enabled>false</geo_enabled>
<verified>false</verified>
<following>true</following>
<statuses_count>10219</statuses_count>
<lang>en</lang>
<contributors_enabled>false</contributors_enabled>
<follow_request_sent>false</follow_request_sent>
<listed_count>466</listed_count>
<show_all_inline_media>false</show_all_inline_media>
<default_profile>false</default_profile>
<default_profile_image>false</default_profile_image>
<is_translator>false</is_translator>
</user>
<geo />
<coordinates />
<place />
<possibly_sensitive>false</possibly_sensitive>
<contributors />
<entities>
<user_mentions />
<urls>
<url end="135" start="116">
<url>http://t.co/rWnx5pe</url>
<display_url>bit.ly/ookpnp</display_url>
<expanded_url>http://bit.ly/ookpnp</expanded_url>
</url>
</urls>
<hashtags />
</entities>
</status>
这是我用来解析它的代码(它不工作)。它正在编译和运行,但是" thisweet "返回为空....
XElement xmlData = XElement.Parse(e.Result);
thisTweet = (from tweet in xmlData.Descendants("status")
select new Tweet
{
created_at = tweet.Element("created_at").Value,
text = tweet.Element("text").Value,
//user info
name = tweet.Element("user").Element("name").Value,
profile_image_url = tweet.Element("user").Element("profile_image_url").Value,
screen_name = tweet.Element("user").Element("screen_name").Value,
user_id = tweet.Element("user").Element("id").Value
}).First<Tweet>();
DataContext = thisTweet;
您的XML没有名为"status"的后代- status是根元素。无论如何,您都希望解析单个 tweet,所以为什么不只是:
XElement tweet = XElement.Parse(e.Result);
var thisTweet = new Tweet()
{
created_at = tweet.Element("created_at").Value,
text = tweet.Element("text").Value,
//user info
name = tweet.Element("user").Element("name").Value,
profile_image_url = tweet.Element("user").Element("profile_image_url").Value,
screen_name = tweet.Element("user").Element("screen_name").Value,
user_id = tweet.Element("user").Element("id").Value
};
Status是XML的根。如果您的xml中存在多个状态节点,那么您的LINQ查询将工作。
将descendants替换为DescendantAndSelf,它将在你的情况下工作,不需要修改任何其他内容。
Twitter还为相同的数据公开了一个JSON提要,这可能对您的用户数据/互联网移动订阅更友好,因为JSON往往比XML的开销更小。然后,如果你使用JSON,你可以使用数据契约来反序列化响应,这将使你的代码更易于管理。
表示如何检查:在WP7中使用JSON代替SOAP