`
thierry.xing
  • 浏览: 666019 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
580fa9c1-4a0c-3f40-a55a-c9256ce73302
Sencha Touch中...
浏览量:0
社区版块
存档分类
最新评论

WP7 腾讯/新浪微博 设计 -- 解析XML数据并绑定

 
阅读更多

1. Silverlight中解析XML数据

 

在SL中使用LINQ TO XML解析XML数据是个不错的方案。

命名空间:using system.xml.linq;

首先,微博API返回数据可以有2种,json或者xml. 本例中采取xml来解析。

范例XML如下(新浪微博)。

 

<statuses>
   <status>
    <created_at>Wed Apr 27 20:12:46 +0800 2011</created_at>
    <id>marcoweaver</id>
    <text>做html,css培训,过了一把老师瘾。
</text>
    <source>
      <a href="http://weibo.com">新浪微博</a>
    </source>
    <favorited>false</favorited>
    <truncated>false</truncated>
    <geo />
    <in_reply_to_status_id />
    <in_reply_to_user_id />
    <in_reply_to_screen_name />
    <mid>5600235199709807760</mid>
    <user>
      <id>1252373132</id>
      <screen_name>全球热门排行榜</screen_name>
      <name>全球热门排行榜</name>
      <province>44</province>
      <city>1</city>
      <location>北京</location>
      <description></description>
      <url>http://1</url>
      <profile_image_url>http://tp1.sinaimg.cn/1252373132/50/1290081552/1</profile_image_url>
      <domain>saviourlove</domain>
      <gender>m</gender>
      <followers_count>1292095</followers_count>
      <friends_count>1240</friends_count>
      <statuses_count>7134</statuses_count>
      <favourites_count>4338</favourites_count>
      <created_at>Tue Sep 08 00:00:00 +0800 2009</created_at>
      <following>false</following>
      <verified>false</verified>
      <allow_all_act_msg>true</allow_all_act_msg>
      <geo_enabled>true</geo_enabled>
    </user>
    <retweeted_status>
      <created_at>Wed Apr 27 14:11:31 +0800 2011</created_at>
      <id>9720751183</id>
      <text>智城</text>
      <source>
        <a href="http://weibo.com">新浪微博</a>
      </source>
      <favorited>false</favorited>
      <truncated>false</truncated>
      <geo />
      <in_reply_to_status_id />
      <in_reply_to_user_id />
      <in_reply_to_screen_name />
      <thumbnail_pic>http://ww4.sinaimg.cn/thumbnail/78c29ec1jw1dgn178wnfcj.jpg</thumbnail_pic>
      <bmiddle_pic>http://ww4.sinaimg.cn/bmiddle/78c29ec1jw1dgn178wnfcj.jpg</bmiddle_pic>
      <original_pic>http://ww4.sinaimg.cn/large/78c29ec1jw1dgn178wnfcj.jpg</original_pic>
      <mid>5600142106459294297</mid>
      <user>
        <id>2026020545</id>
        <screen_name>只分享快乐</screen_name>
        <name>只分享快乐</name>
        <province>32</province>
        <city>1</city>
        <location>江苏 南京</location>
        <description />
        <url />
        <profile_image_url>http://tp2.sinaimg.cn/2026020545/50/1300101443/0</profile_image_url>
        <domain />
        <gender>f</gender>
        <followers_count>30</followers_count>
        <friends_count>45</friends_count>
        <statuses_count>13</statuses_count>
        <favourites_count>0</favourites_count>
        <created_at>Mon Mar 14 00:00:00 +0800 2011</created_at>
        <following>false</following>
        <verified>false</verified>
        <allow_all_act_msg>false</allow_all_act_msg>
        <geo_enabled>true</geo_enabled>
      </user>
    </retweeted_status>
  </status>
  <!--若干个status-->
  </status>
 

根据XML格式设计对应的实体类,分别为Status 和 User,属性对应节点,很简单,这里不赘述。

linq解析格式如下;其中content为服务器返回的字符串。

 

XElement doc = XElement.Parse(content);
 
var friendTimeLine = from p in doc.Descendants("status")
        select new Status
        {
                 Created_at = p.Element("created_at").Value,
                 StatusId = p.Element("id").Value
        };

 

如果xml中指定了xmlns,则

 

foreach (XElement feedPost in xdoc.Elements(XName.Get("status", "http://api.renren.com/1.0/"))) 
 
即可

2.数据绑定

首先在界面上做绑定

<controls:PivotItem Header="我的主页">
<!--Triple line list no text wrapping-->
    <ListBox x:Name="SecondListBox" ItemsSource="{Binding Mode=OneWay}" Margin="0,0,-12,0">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Margin="0,0,0,17">
                                  <TextBlock Text="{Binding Created_at}" TextWrapping="NoWrap" Margin="12,0,0,0" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
                                  <TextBlock Text="{Binding StatusId}" TextWrapping="NoWrap" Margin="12,-6,0,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</controls:PivotItem>
 
之后在隐藏代码给控件指定数据源。
XElement doc = XElement.Parse(content);
 
var friendTimeLine = from p in doc.Descendants("status")
        select new Status
        {
                 Created_at = p.Element("created_at").Value,
                 StatusId = p.Element("id").Value
        };
 
 Dispatcher.BeginInvoke(() =>
{
         SecondListBox.DataContext = friendTimeLine.ToList();
});
 

关于INotifyPropertyChanged接口,虽然看Jake Lin的视频上说数据源提供类在oneway,twoway一定要实现该接口,但是个人感觉这只是一个发生改变时的通知,如果绑定数据只显示而很少或基本 不更改,那么没有必要实现。--(这是我以前的想法,结果后来遇到数据第一次不能刷新的情况后来才发现是没有实现该接口的问题,罪过啊)

 

3. 关于WP7的数据绑定

 

1.

<TextBlock .. Text="{Binding ElementName=slider, Path=Value}"/>
 
此处绑定的是Name为slider的Slider控件, Path 为属性,不用Property而用Path的原因是path可以指定一个序列 。 如 Children[0].Value
 
2. 用代码表示
Binding binding = new Binding();
binding.ElementName = "slider";
binding.Path = new PropertyPath("value");
txtblk.SetBinding(TextBlock.TextProperty, binding);



 绑定要求是 txtblk 是FrameworkElement, 而 TextBlock.TextProperty为dependency property.

3.Binding convertors
Binding的Converter属性是IValueConverter类型的,需要实现Convert 和 ConvertBack 两个方法。
另外Binding类还定义了ConverterParameter属性,用于格式化,支持标准的String.Format方法。

text="{Binding ElementName=slider, Path=value, Converter={StaticResource stringFormat}, ConverterParameter='{0:F2}'}"
 
4.Relative Source
用于绑定同一个元素的不同属性

5.DataContext
可以省略一些重复的代码,比如 StackPanel下2个TextBlock text= "{Binding Source={StaticResource clock}, Path=Hour}" 另外一个也需要重复写 Source.
但是如果给StackPanel指定DataContext之后,这两个TextBlock就可以只指定Text= "{Binding Hour}" 就OK。
分享到:
评论

相关推荐

    WordPress.com REST API开发人员控制台-由https://github.com/Automattic/wp-api-console取代-Node.js开发

    该项目已被https://github.com/Automattic/wp-api-console取代,该项目现在通过developer.wordpress.com为API控制台提供动力。 开发黑客需要node.js,为您的系统安装node.js。 (例如brew install节点)。 要启动并...

    WP-DBManager2.50 简体中文包插件 for WordPress.zip

    3.将wp-content/plugins/wp-dbmanager目录中的 htaccess.txt修改为:.htaccess ,并把.htaccess 文件移动到:wp-content/backup-db/目录下 (你也可以下载我们为你修改好的:.htaccess文件压缩包,解压后上传到wp-...

    wp-ajaxer:适用于WP ThemePlugin开发人员的简单轻量级Ajax处理程序

    $ wget https://raw.githubusercontent.com/varunsridharan/wp-ajaxer/master/class-ajaxer.php 样品用量 class BoilerPlate_Ajax extends Varunsridharan \ WordPress \ Ajaxer { /** * Ajax Action Prefix *

    class-wp.php

    使用WordPress撰写中文文章的时候,如果说在固定链接中选择加入一个%postname%项,生成的url就会因为含有中文而无法被支持,网站显示404。这是需要进行更改后的文件,可以解决问题。

    apachecn#apachecn-ctf-wiki#[WP/BUU/CTF]Cookie-Store-题解_車鈊的博客-CSD

    来源:,涉及Cookie的使用方法操作方

    基于PHP的worldpress新浪微博同步插件WP-ConnectForWordPress源码.zip

    这个压缩包文件包含的是一个名为WP-Connect的插件,专为WordPress博客系统设计,用于实现与新浪微博的同步功能。WordPress是一种广泛应用的内容管理系统(CMS),而WP-Connect则是WordPress的一个扩展,通过PHP编程...

    新浪微博WP7 API

    在Windows Phone 7.5( Mango )平台上,新浪微博推出了一款专为该系统设计的API,即“新浪微博WP7 API”。本文将详细探讨这一API的功能、使用方法以及它如何帮助开发者构建微博功能的应用程序。 首先,我们需要...

    S-TUNE_Ver

    3. 实时监控:软件提供实时数据监测功能,用户可以实时查看电机的工作状态,如速度、电流、位置等,及时发现并解决可能出现的问题。 4. 故障诊断:当伺服系统出现异常时,S-TUNE_Ver能够提供详细的故障信息,帮助...

    新浪微博Windows Phone 7客户端

    总之,“新浪微博Windows Phone 7客户端”项目不仅展示了.NET框架下的移动应用开发能力,还涉及到社交网络API的使用、数据解析、UI设计等多个方面,对于初学者来说,这是一个极好的学习和实践平台。通过分析和研究这...

    云计算技术Zstack实践-搭建WordPress个人网站.pptx

    2. 复制并配置`wp-config-sample.php`为`wp-config.php`,并替换数据库相关参数: ``` cd /var/www/html/wp-blog/ cp wp-config-sample.php wp-config.php sed -i 's/database_name_here/wordpress/' /var/...

    WP7新浪微博SDK源码

    WP7新浪微博SDK源码 源码介绍: 支持 Oauth 1.0 和 xAuth 两种授权模式。 下载包中包含源代码,示例代码。 新浪微博是一个由新浪网推出,提供微型博客服务的类Twitter网站。 用户可以通过网页、WAP页面、手机短信、...

    新浪微博的WP7SDK

    新浪微博的WP7 SDK。帮助你快速链接新浪微博API

    WP-NicEdit 0.1插件 for Wordpress.zip

    解压ZIP文档,并上传至/wp-content/plugins/目录下激活即可。 注:如过您的Wordpress并非安装在网站根目录下,比如是在根目录下的blog目录中,请编辑nicEdit.js文件的第30行为: iconsPath : ‘/blog/wp-content/...

    关于发布程序上线和回滚的shell

    /bin/cp /home/chenlong/blog/wp-includes/js/common.js /home/chenlong/Publish/blog/2010-05-21/patch/home/chenlong/blog/wp-includes/js/common.js === cmd === :/home/chenlong/patch_sh/apply_cp.sh /home/...

    wp-api-multiple-posttype:wordpress wp rest api wpv2posts api的v2扩展,以允许查询多种帖子类型

    使用端点:“ / wp-json / wp / v2 / multiple-post-type” 清单: GET请求到/wp-json/wp/v2/multiple-post-type?&type[]=post&type[]=page 用“约我”来获取页面: GET /wp-json/wp/v2/multiple-post-type?...

    wp入门f教程 ----不错的教程

    WP入门教程----不错的教程 本文旨在为读者提供一个全面的WP入门教程,涵盖了WP的基本概念、安装、开发环境、portlet创建环境、基本开发、与其他产品集成、开发与部署等方面的知识。 WP入门教程概述 --------------...

    PHP实例开发源码-worldpress 新浪微博同步插件 WP-Connect For WordPress.zip

    PHP实例开发源码—worldpress 新浪微博同步插件 WP-Connect For WordPress.zip PHP实例开发源码—worldpress 新浪微博同步插件 WP-Connect For WordPress.zip PHP实例开发源码—worldpress 新浪微博同步插件 WP-...

    wordpress资源主题新版子比主题源码 ripro-v5-8.3开心版主题源码.zip

    使用方法: 1、下载主题源码ripro-v5.zip进行安装。 2、下载激活文件ripro-v5-active.php上传到wp根目录,访问一次,即可激活。

    基于PHP的worldpress 新浪微博同步插件 WP-Connect For WordPress.zip

    当用户在WordPress上发布新文章、页面或者更新现有内容时,WP-Connect会自动检测这些变化,并按照预设的配置将内容同步到用户的新浪微博账号。这样,不仅可以让更多的微博用户看到你的博客内容,还有助于提高网站的...

    wordpress QQ、微博登录插件foxlogin.zip

    Foxlogin是一款快速让你的WordPress网站接入微博和QQ快捷登陆的插件,让你的站点用户绑定腾讯QQ或新浪微博来进行登录的wordpress中文插件。 【开启QQ快速登录】:开启QQ快速登录开关设置 【QQ账户APP ID】:填写...

Global site tag (gtag.js) - Google Analytics