闭关纪要5.WML,UTF-8,BOM,签名及其他

        闭关到现在,进入了比较困难的时间,容易做的事情差不多都做完了(例如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 SimulatorMicrosoft Mobile Explorer 3.0这两个软件不错,搭配调试,应该就没有什么大的问题了,在后期调整的时候,再去参考m3gate要容易得多。

        今天时间不够,不多写,不过在这里附上我通过C#操作XML来实现Google的移动SiteMap的基础代码,因为新的Wap sitemap格式有了变化,命名空间什么的很容易让人弄乱,有兴趣可以看看下面的代码(生成的文件范例参看Google Mobile SiteMap范例):

 

ContractedBlock.gif ExpandedBlockStart.gif C# Mobile SiteMap
 1    public class PlaceSiteMap :System.Web.UI.Page
 2ExpandedBlockStart.gifContractedBlock.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)
 8ExpandedSubBlockStart.gifContractedSubBlock.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)
21ExpandedSubBlockStart.gifContractedSubBlock.gif        {
22            InitializeComponent();
23            base.OnInit(e);
24        }

25        private void InitializeComponent()
26ExpandedSubBlockStart.gifContractedSubBlock.gif        {    
27            this.Load += new System.EventHandler(this.Page_Load);
28        }

29        private void CreateUrl(string changefreq,string lastmod,string loc,string priority)
30ExpandedSubBlockStart.gifContractedSubBlock.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    }

 

        嗯,字数凑够,可以交差了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值