闭关到现在,进入了比较困难的时间,容易做的事情差不多都做完了(例如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范例):
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
C# Mobile SiteMap
1
public class PlaceSiteMap :System.Web.UI.Page
2![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
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![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
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![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
22
InitializeComponent();
23
base.OnInit(e);
24
}
25
private void InitializeComponent()
26![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
27
this.Load += new System.EventHandler(this.Page_Load);
28
}
29
private void CreateUrl(string changefreq,string lastmod,string loc,string priority)
30![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
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
}
嗯,字数凑够,可以交差了!