侵权投诉
订阅
纠错
加入自媒体

iPhone wap浏览器之预备篇

2011-01-14 16:48
苏子言岁月
关注

  在笔者的上一篇文章《玩转iPhone网络通讯之BSD Socket篇》中,笔者试图在iPhone平台上利用BSD Socket搭建了一个同时兼容TCP/IP和HTTP协议进行通讯的框架,而在接下来的几篇文章里,笔者将进一步完善这个网络通讯的引擎并利用这个引擎写一个简易的wap浏览器。

  在iPhone的safari浏览器上并不支持WML的解析,尽管笔者也认为WML这种抱残守旧的技术被淘汰是迟早的事,但WML作为XML结构的一个“变种”进行学习还是不错的。

  最近浏览器技术很热,热得笔者都摸不着头脑,前段时间金山的雷军同志也投资UCWeb,尽管笔者并不觉得浏览器技术有什么高深的技术含量抑或可进行投资的价值,其实浏览器充其量是个客户端,但是既然人家大牛看好,那笔者研究研究也不无益处,或许看完本文读者也可以拿着自己的产品去找雷军同志投资一把了:)

  闲话少话,言归正传。

  上面说了,WML是XML结构的一个“变种”或者说特例,既然是特例那么就可以把它当成XML来进行解析。那么做一个浏览器的任务流程就清晰了,如下:

  ² 封装BSD Socket进行HTTP请求。

  ² 将请求到的WML页面解析成XML数据结构。

  ² 渲染需要在界面上显示的WML标签(英文名tag)。

  ² 将渲染后的WML标签显示在界面上(UIView)。

  其中第一条在笔者的前一篇文中《玩转iPhone网络通讯之BSD Socket篇》已经进行了初步的编写,当然笔者还会在下面的文章中进一步完善。

  这篇文章中着重讲解WML的解析,因为WML是XML数据的特例,解析WML也就意味这解析XML。

  说到解析XML,iPhone为程序员提供了很多工具比如NSXMLParser,这个类的接口定义如下:

  @interface NSXMLParser : NSObject {

  @private

  void * _parser;

  id _delegate;

  id _reserved1;

  id _reserved2;

  id _reserved3;

  }

  - (id)initWithContentsOfURL:(NSURL *)url; // initializes the parser with the specified URL.

  - (id)initWithData:(NSData *)data; // create the parser from data

  // delegate management. The delegate is not retained.

  - (id)delegate;

  - (void)setDelegate:(id)delegate;

  - (void)setShouldProcessNamespaces:(BOOL)shouldProcessNamespaces;

  - (void)setShouldReportNamespacePrefixes:(BOOL)shouldReportNamespacePrefixes;

  - (void)setShouldResolveExternalEntities:(BOOL)shouldResolveExternalEntities;

  - (BOOL)shouldProcessNamespaces;

  - (BOOL)shouldReportNamespacePrefixes;

  - (BOOL)shouldResolveExternalEntities;

  - (BOOL)parse; // called to start the event-driven parse. Returns YES in the event of a successful parse, and NO in case of error.

  - (void)abortParsing; // called by the delegate to stop the parse. The delegate will get an error message sent to it.

  - (NSError *)parserError; // can be called after a parse is over to determine parser state.

  @end

  从接口的定义中大致可以知道,这个类解析XML是采用SAX模式(Simple API for XML),而SAX是基于事件驱动的,其基本工作流程是分析XML文件流数据,每当发现一个新的元素时,就会产生一个对应的事件,并调用相应的用户处理函数。在iPhone上苹果公司采用了delegate模式,每发现一个新的元素时,就会调用相应的委托接口进行XML标签的处理。

  利用SAX模式解析XML占用内存少、速度快,但用户需要把解析到的XML标签自己组合成一个树状结构,从而使程序处理比较复杂。

1  2  3  下一页>  
声明: 本文由入驻维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。

发表评论

0条评论,0人参与

请输入评论内容...

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

文章纠错
x
*文字标题:
*纠错内容:
联系邮箱:
*验 证 码:

粤公网安备 44030502002758号