闭关到现在,进入了比较困难的时间,容易做的事情差不多都做完了(例如Step1.cn的改造和Dituren.cn的创建),不容易做的事情就很难有什么进展了,加上最近在公司特别忙,因比较懒的回来之后还研究什么,不过不管怎么说,还是没有让自己闲着,今天说说最近研究的WAP开发吧。
现在开始研究WAP不知道是有点早还是有一点晚,这个且不谈它,现在我终于上线了一个简单版本的http://wap.dituren.cn/ 的WAP站,现在特将一些心得分享一下:
首先说说UTF-8 BOM,又叫签名,有时候会遇到过这样的问题:明明一个格式很好的XML文件,编码设置也是正确的,可是在一些情况下打开的时候,总是显示出错,提示找不到XML根节点,我在开发WAP的时候被这个问题困扰很久(有一些模拟器或者手机不识别带BOM的文件),现在终于明白原来是BOM在作怪,如果你曾经遇到过这样的问题,建议参考以下以下地址:
W3C对BOM的说明
c#如何生成不带签名的utf-8文件
如果你使用Window的记事本编写XML,记事本没有可以设置的地方,因此一定会写入3个字节的BOM信息,如果使用EditPlus,在工具-〉参数-〉文件里面不难找到设置的地方,我就把这个项目设置为“总是移除签名”了,呵呵
其次说说WAP开发工具,一般来讲,m3gate是最严格的一个软件,实在太严格了(Google的WAP站都不支持),而且不显示具体的错误,因此不适合作为开发调试之用,我觉得Openwave V7 Simulator和Microsoft Mobile Explorer 3.0这两个软件不错,搭配调试,应该就没有什么大的问题了,在后期调整的时候,再去参考m3gate要容易得多。
今天时间不够,不多写,不过在这里附上我通过C#操作XML来实现Google的移动SiteMap的基础代码,因为新的Wap sitemap格式有了变化,命名空间什么的很容易让人弄乱,有兴趣可以看看下面的代码(生成的文件范例参看Google Mobile SiteMap范例):
C# Mobile SiteMap
1 public class PlaceSiteMap :System.Web.UI.Page
2 {
3 XmlDocument doc=new XmlDocument();
4 XmlNode urlXmlNode;
5 string nsUrl="http://www.google.com/schemas/sitemap/0.9";
6 string mobileUrl = "http://www.google.com/schemas/sitemap-mobile/1.0";
7 private void Page_Load(object sender, System.EventArgs e)
8 {
9 Response.ContentType = "text/xml";
10 Response.Charset = "utf-8";
11 doc.AppendChild(doc.CreateElement(null,"urlset",nsUrl));
12 doc.InsertBefore(doc.CreateXmlDeclaration("1.0","utf-8"),doc.DocumentElement);
13 XmlAttribute attr = doc.CreateAttribute("xmlns:mobile");
14 attr.Value = mobileUrl;
15 doc.DocumentElement.Attributes.Append(attr);
16 //重复调用此函数即可
17 this.CreateUrl("daily",System.DateTime.Now.ToString("s"),"http://wap.dituren.cn/place/cn/","1.0");
18 doc.Save(Response.OutputStream);
19 }
20 override protected void OnInit(EventArgs e)
21 {
22 InitializeComponent();
23 base.OnInit(e);
24 }
25 private void InitializeComponent()
26 {
27 this.Load += new System.EventHandler(this.Page_Load);
28 }
29 private void CreateUrl(string changefreq,string lastmod,string loc,string priority)
30 {
31 urlXmlNode=doc.CreateElement("url",nsUrl);
32 urlXmlNode.AppendChild(doc.CreateElement("changefreq",nsUrl));
33 urlXmlNode["changefreq"].InnerText=changefreq;
34 urlXmlNode.AppendChild(doc.CreateElement("lastmod",nsUrl));
35 urlXmlNode["lastmod"].InnerText=lastmod+"+00:00";
36 urlXmlNode.AppendChild(doc.CreateElement("loc",nsUrl));
37 urlXmlNode["loc"].InnerText=loc;
38 urlXmlNode.AppendChild(doc.CreateElement("priority",nsUrl));
39 urlXmlNode["priority"].InnerText=priority;
40 urlXmlNode.AppendChild(doc.CreateElement("mobile:mobile", mobileUrl));
41 doc.DocumentElement.AppendChild(urlXmlNode);
42 }
43 }
嗯,字数凑够,可以交差了!