前面我们制作了几个简单的Windows Mobile 6.5 Widget,但是这还不够,如果要做一个强大的Windows Mobile 6.5 Widget,我们势必要连接数据源进行数据的显示,我昨天晚上研究这个问题研究到3点多还没研究清楚,今天又想了半天,还直接加了WM Team的人询问了情况,可以说,暂时Windows Mobile 6.5 Widget还不够那么强大,不过我们可以用折中的方法获取数据,就是读取XML,读取XML是一个非常不错的选择,因为大部分的数据交换都能用XML描述。当然,在客户端浏览器上读取XML时非常简单的一件事,但是是否在Widget这个引擎中读取也一样是一件简单的事情呢。
其实,在思路上差不多,但是有些细节要注意。我们可以使用XMLHttpRequest对象获取远程服务器上的文本,然后再进行转换,值得注意的是,这里暂时不支持XMLDom,所以我们只能用正则表达式的形式获取XML的数据了。我们先写文本内容,代码如下所示。
<head>
<title>Default Page</title>
<link href="css/css.css" rel="stylesheet" type="text/css" />
<script src="lib/jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="lib/httprequest.js" type="text/javascript"></script>
</head> <body>
<div id="mother"></div>
</body>
</html>
我们用的是一个非常非常简单的页面,这个页面使用了JQuery和我们自己写的类,另外说明一下,用JQuery的$.get方法好像并不能够获取到远程的XML数据,并且获取的数据获取的responseXML也很有可能为null,所以我们只好用最原始的方法获取数据。其中httprequest代码如下所示。
{
//check the httprequest and get the request from the url
var text;
var req=new XMLHttpRequest();
req.open("GET", url, false);
req.send(null);
if(req.status==200)
{
text = req.responseText;
}
else
{
text = "";
}
return text;
}
上面的代码就是获取一个url的内容,我们获取XML或RSS都行,反正用正则表达式获取的。其中我们还需要使用一个方法,这个方法就是获取XML的标记,由于这里用不了XMLDom,所以只能用正则,示例代码如下所示。
{
var reg = new RegExp("<"+ele+">.*<\/"+ele+">","g");
var show=text.match(reg);
//replace the element
for(i=0;i<show.length;i++)
{
show[i] = show[i].replace("<"+ele+">","").replace("</"+ele+">","");
}
//return now array
return show;
}
上面的代码也非常简单,就是从文本中找到字符并替换掉标记,上面两个方法都是在我们的httprequest类中的,我们保存之后再直接在我们的html里面编写即可,html里面的script代码如下所示。
try{
var t = CheckHttpRequest("http://www.jguoer.com/syndication.axd");
var title = GetElement(‘title‘,t);
var link = GetElement(‘link‘,t);
for(i=1;i<link.length;i++)
{
var divs = "<div style=’border-bottom:1px solid
#ccc;background:#fafafa;padding:5px;’>"+title[i]+"</div>";
$("#mother").append(divs);
}
}
catch(e)
{
var divs = "<div style=’border-bottom:1px solid #ccc;
background:#fafafa;padding:5px;color:red’>Error Happend!</div>";
$("#mother").append(divs);
}
});
这样我们一个读取远程数据的widget就制作好了,同样打包并运行,运行结果如下图。


这里URL是填写的我的博客的RSS数据,这里我们看到的也是我的博客的RSS数据,说明我们的RSS读取成功了。
不过这里有一个很大的缺点,就是加载的时候速度有点慢,这对应用程序来说可以说致命伤,所以基础好的可以在页面上再加上一个loading界面,这样就看上去更加有好一点。不过可以说,WM的Widget还需要有很多要做。另一种方式就是使用AJAX 4和ADO.NET Entity进行数据访问,不知道国内有多少人用.NET 3.5 SP1并有主机,看来在中国是不太现实的啊。明天我有可能翻译一个国外WM友人的一篇文章,如何使用AJAX 4和ADO.NET Entity进行数据访问。
[...] Windows Mobile 6.5 Widget – 读取远程XML数据 [...]