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>&lt;a href="http://twitterfeed.com" rel="nofollow"&gt;twitterfeed&lt;/a&gt;</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;

Linq到XML解析单个“状态”节点从twitter API

您的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