zoukankan      html  css  js  c++  java
  • WP8.1简单项目 《在线词典》

    为什么要做这个词典?

    1. 学了正则表达式要运用
    2. 增加WP开发熟练度

    项目中运用了那些技术?

    1. HttpClient
    2. 正则表达式
    3. 数据绑定

    详解

    通过http://cn.bing.com/dict/search?q=可以向必应词典发送查询单词请求,可以得到一个如下的页面
    img0
    具体代码如下:

    string uri = "http://cn.bing.com/dict/search?q=" + word;
    HttpClient hc = new HttpClient();
    string htmlFile = await hc.GetStringAsync(uri);
    

    这样,页面的源代码就储存在htmlFile里面了,接下来让我们来解析这份文件,我们要用到的是正则表达式,不了解的同学可以到这里去花30分钟简单的学一下.

    首先,我们需要确定哪些文本是我们需要的,显而易见,我们需要橙色框中的部分。
    img1
    然而,捕获这段文本并不方便,通过观察页面源代码,我发现了如下的内容img2
    高亮出来的部分不正是我们需要的解释吗?而且捕获它们也非常的方便,只需要如下的代码。

    Regex re = new Regex(@"(?<=],)[a-zA-Z网].*?(?=""/>)", RegexOptions.IgnoreCase);
    Match m = re.Match(htmlFile);
    

    其中,我们用到的正则表达式为(?<=],)[a-zA-Z网].*?(?="/>)
    为了得出这个表达式,我用到了这个测试工具,而且这个工具还可以一键生成C#语句,相当方便。

    这样,我们就得到了这样的初步结果

    n. 密集的人(或东西);方阵; 网络释义: 密集阵;趾骨;指骨;
    

    再通过这个表达式可以把这个解释按词性断开
    [a-zA-Z网].*?(?=;s)
    需要给上面的初步结果尾部加一个空格

    为了向用户展示结果,我用了数据绑定(对于初学者,怎么能把自己学过的东西都用上就怎么搞)。
    首先,创建一个MyDic类,让它继承于INotifyPropertyChanged接口,并实现这个接口。添加一个用来接收事件的函数

    private void RaisePropertyChanged(string bindingpath)
            {
                if (PropertyChanged!=null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs(bindingpath));
                }
            }
    

    MyDic对象的一个属性的值发生变动的时候,会发布一个PropertyChanged事件,所以我们需要在对应的属性的set语句后调用这个函数。这样,它就能在属性发生改变的时候通知UI中展示结果的控件:该刷新了~


    The End.

  • 相关阅读:
    计算机网络知识技能水平的测评试题
    Socket与系统调用深度分析
    学习构建调试Linux内核网络代码的环境MenuOS系统
    深入学习socket网络编程,以java语言为例
    网络配置工具iproute2和net-tools的基本原理和基本使用方法
    Linux系统学习总结报告
    结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程
    深入理解系统调用-40号调用
    基于mykernel2.0 编写一个操作系统内核
    交互式多媒体图书平台的设计与实现
  • 原文地址:https://www.cnblogs.com/JacZhu/p/5486558.html
Copyright © 2011-2022 走看看