`
wuhua
  • 浏览: 2112013 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

解释wml

    博客分类:
  • J2ME
阅读更多

     在设计wap Explorer时关键的一步是解释wml生成UI控件,并添加到Form上对于我来说遇到了困难。
     比如:1.网络读取的wml有很多是不规范的wml比如缺少结束标记,或者游戏特殊字符,比如字符'<'而网络上的可能是“《”这样解释的时候就会抛出异常--对于kml解释器来说。这样的话,下面的就解释不到了。只能显示一部分的wml,所以这就需要一个容错能力强的wml解释器。
    2。生成UI控件,因为j2me高级UI不提供对这些方面的需求,所以就要自己来设计。自己设计要考虑到事件处理,UI控件的位置处理等。这就决定了,是一开始解释就确定UI的位置呢。还是解释好。绘制出来的时候才具体进行位置匹配。
   3.。。
   4.。。。
 
    好现在将我解释一些简单的wml思路整理出来。在这些代码中只能解释不带特殊标记的wml,比如&nbsp;(主要是kxml会报错)。
   首先自己写一个接口专门用于解释wml,并生成结果对象。

java 代码
 
  1. public interface Parser {  
  2.     Vector getResult();  
  3.     void parser() throws Exception;  
  4. }  


对于wap来说。标记语言也是比较多的。比如wml, xhtml等,现在我只写支持wml的wap。里面的代码只是思路。

java 代码
 
  1. public final class WmlParser implements Parser {  
  2.     private static Logger logger = Logger.getLogger("WmlParser");  
  3.     /** 
  4.      * Wap GUI集合 
  5.      */  
  6.     private   Vector parts = new Vector();;  
  7.     private   Part part;  
  8.        
  9.     private   Hashtable attr = new Hashtable();  
  10.    
  11.       
  12.     /** 
  13.      * 当前标记,通过当前标记来创建Wap UI. 
  14.      */  
  15.     private   String currentTag;  
  16.       
  17.     /** 
  18.      * 创建当前Align. 
  19.      */  
  20.     private String align;  
  21.     KXmlParser parser;  
  22.       
  23.       
  24.     private WmlParser(InputStream in) throws XmlPullParserException{  
  25.         parser = new KXmlParser();  
  26.         parser.setInput(in, "UTF-8");  
  27.     }  
  28.       
  29.     public static WmlParser getWmlParser(InputStream in) throws XmlPullParserException{  
  30.         return new WmlParser(in);  
  31.     }  
  32.        
  33.     /** 
  34.      * 解释wml,并生成一系列的Wap GUI部件。 
  35.      * 比如遇到<a href="index.wml">首页</a> 则对于的生成一个 HyperLink; 
  36.      * @see WAPGUIFactory.createHyperLink(String text, String url, 
  37.             String algin) ; 
  38.      * @param in -- 通过Net获取InputStream 
  39.      * @return -- 返回一个Vector集,里面包含了,Wap GUI 
  40.      * @throws XmlPullParserException -- 解释出错的时候抛出异常 
  41.      * @throws IOException -- 读取数据的时候抛出异常 
  42.      */  
  43.     public final   void parser()  
  44.             throws XmlPullParserException, IOException {  
  45.         if(parser == null)  
  46.             throw new XmlPullParserException("Parser is Null");  
  47.   
  48.         int eventType = parser.getEventType();  
  49.         while (eventType != XmlPullParser.END_DOCUMENT) {  
  50.             if (eventType == XmlPullParser.START_DOCUMENT) {  
  51.                    
  52.             } else if (eventType == XmlPullParser.END_DOCUMENT) {  
  53.                    
  54.             } else if (eventType == XmlPullParser.START_TAG) {  
  55.                 parserWapTagImpl(parser );  
  56.                
  57.             } else if (eventType == XmlPullParser.END_TAG) {  
  58.                
  59.             } else if (eventType == XmlPullParser.TEXT) {  
  60.                 parserTextImpl(parser);  
  61.             }  
  62.             eventType = parser.next();  
  63.         }  
  64.         //return parts;  
  65.     }  
  66.     private void parserTextImpl(KXmlParser parser) {  
  67.         logger.debug("The Two parser ... ");  
  68.         parserAlign();  
  69.         if(currentTag.equals(WmlTag.A_TAG)){  
  70.              parserHyperLinkImpl(parser);  
  71.         }else if(currentTag.equals(WmlTag.P_TAG)){  
  72.             paserStringPart(parser);  
  73.         }  
  74.     }  
  75.   
  76.     /** 
  77.      * 处理String的显示 
  78.      * @param parser2 
  79.      */  
  80.     private void paserStringPart(KXmlParser parser) {  
  81.         String text = parser.getText();  
  82.       
  83.         if(text != null || !text.equals("")){  
  84.             part = WAPGUIFactory.createStringPart(parser.getText(), Style.PLAIN_SMALL, align);  
  85.             parts.addElement(part);  
  86.             logger.debug("Text : " +  text);  
  87.         }  
  88.         attr.clear();  
  89.     }  
  90.   
  91.     /** 
  92.      * 处理HyperLink,并生成HyperLink控件 
  93.      * @param parser 
  94.      */  
  95.     private   void parserHyperLinkImpl(KXmlParser parser) {  
  96.          String herf = (String) attr.get(WmlTag.A_ATTR[0]);  
  97.          if(herf != null && !parser.getText().equals("")){             
  98.                
  99.              part = WAPGUIFactory.createHyperLink(parser.getText(), herf, align);  
  100.              parts.addElement(part);  
  101.             // logger.debug(herf);  
  102.          }  
  103.          attr.clear();  
  104.           
  105.     }  
  106.   
  107.     private void parserAlign() {  
  108.         //align = (String)attr.get(WmlTag.P_ATTR[1]);  
  109.         if(align == null || align.toLowerCase().equals("left")){  
  110.              align = Part.ALIGN_LEFT;  
  111.          }else if(align.toLowerCase().equals("center")){  
  112.              align = Part.ALIGN_CENTER;  
  113.          }else if(align.toLowerCase().equals("right")){  
  114.              align = Part.ALIGN_RIGHT;  
  115.          }else{  
  116.              align = Part.ALIGN_LEFT;  
  117.          }  
  118.            
  119.     }  
  120.   
  121.     /** 
  122.      * 解释Wap标记,并把属性保存到attr 
  123.      * @param parser 
  124.      */  
  125.     private   void parserWapTagImpl(KXmlParser parser) {  
  126.         //logger.debug("The One parser ... ");  
  127.          String name = parser.getName();  
  128.          int size = parser.getAttributeCount();  
  129.             for (int i = 0; i < size; i++) {  
  130.                 if(parser.getAttributeName(i).toLowerCase().equals(WmlTag.ALIGN)){  
  131.                     align = parser.getAttributeValue(i).toLowerCase();  
  132.                 }else{  
  133.                     attr.put(parser.getAttributeName(i).toLowerCase(), parser.getAttributeValue(i).toLowerCase());  
  134.                 }  
  135.                   
  136.                 logger.debug(parser.getAttributeName(i) + " : " + parser.getAttributeValue(i));  
  137.                   
  138.             }  
  139.          currentTag = name;  
  140.     }  
  141.   
  142.     public Vector getResult() {  
  143.         return parts;  
  144.     }  
  145. }  


唉,元旦3天都不曾怎么写代码。好像挺浪费的

分享到:
评论

相关推荐

    WMLScript.rar_WMLScript

    在深入学习WMLScript时,可以参考《第7章 WMLScript基础.doc》这样的文档,它们通常会详细解释WMLScript的语法、函数、对象以及实例应用。此外,实践是掌握任何编程语言的关键,尝试编写简单的WMLScript脚本并运行在...

    Wap开发教程 WML参考手册

    解释WML解析和执行过程中的错误类型及处理方法。 5. **最佳实践** 提供编写高效、易读WML代码的建议。 通过学习WAP开发教程和查阅WML参考手册,开发者可以掌握创建适应移动设备的Web应用所需的技能,从而为移动...

    Learning WML & WML Script

    书中首先对WAP栈进行了概述,解释了数据如何从服务器传输到客户端的过程。作者使用了一种直观的方式引导读者了解这本书的结构和书中所采用的约定,同时也鼓励读者提出反馈和问题。 第1章“Introduction to WML”...

    WML语言参考教程 WML

    通过阅读`wml-reference.pdf`文档,你可以找到详细的示例代码和解释,进一步了解WML的实际用法。 总之,WML语言是移动互联网早期的重要工具,尽管现在已经被更先进的技术所替代,但理解其基本概念有助于我们理解...

    WML语法大全WMLScript语法大全

    WML标记可以有必需或可选的属性,以指定额外信息来解释这些标签。属性值需用引号包围,属性间用空格分隔,如下: ```xml &lt;element a1="value1" a2="value2" ...&gt; content ``` **变量引用** WML允许使用类似Shell...

    wml介绍,简单易懂,纯word文档

    **WML(无线标记语言)**是Web设计...在提供的`WML.doc`文档中,你可能会找到关于WML更深入的解释,包括其语法示例、实际应用案例以及可能的编码实践,这将帮助你更好地掌握这一已略显过时但依然具有历史价值的技术。

    一个非常好的jsp+wml的例子(包括代码).rar_WML_WML java_jsp wml _wap_wml jsp

    文件名看起来像是教程或示例代码的不同部分,每个文件可能对应一个特定的代码段或解释: - "WAP builds Java applications.htm" 可能是介绍如何使用WAP构建Java应用程序的指南。 - "listing9.htm"到"listing1.htm"...

    无线标记语言(WML)基础之WMLScript基础

    1. **无需编译**:WMLScript是一种解释性语言,不需要编译即可运行。 2. **广泛的设备支持**:几乎所有现代移动设备都支持WMLScript,包括手机和平板电脑等。 3. **消息传递能力**:WMLScript可以处理短信和其他类型...

    WAPStep1.rar_WML_html

    WML的基本情况 [TOP] 用于WAP的标记语言就是WML(Wireless Markup Language)。WML的语法跟XML一样,WML是XML的子集。HTML、XML和WML的文件有很多相似之处,这样网页开发者在...WML文件通常使用XML解释器起来解释。

    征服WAP无线网页制作实务(PDG)

    书籍会解释WML的基本语法、标签和页面结构,以及如何创建交互式的无线网页。 4. **WAP Gateway**:作为移动网络与互联网之间的桥梁,WAP网关的角色和工作原理,以及它如何转换标准HTTP请求以适应移动设备。 5. **...

    WAP编程全书

    书中可能会详细解释WML语法、卡片(card)、表单(form)和链接(link)的用法。 3. **WAP协议栈**:包括WSP(WAP Session Protocol)、WAP-HTTP、WTLS(WAP Transport Layer Security,类似于HTTPS的安全层)等,...

    wap wml 开发手册

    在“wap wml 开发手册”这个压缩包中,"wml_study"文件可能包含了对WML语法、WAP协议的详细解释、开发实践指南等内容,对于那些想要从事或理解早期移动网站开发的人员来说,是一个不可多得的学习资料。通过深入研究...

    Understanding WAP Wireless Applications,Devices, and Services

    4. **微浏览器**:WAP设备上的软件组件,用于解释WML并显示页面内容。 #### WAP的应用与服务 WAP的应用范围广泛,包括但不限于以下几类: - **移动银行与支付**:通过WAP,用户可以随时随地进行账户查询、转账或...

    可莱特ST80WML 内装信号音大型LED多层信号灯产品目录.pdf

    标题“可莱特ST80WML 内装信号音大型LED多层信号灯产品目录.pdf”已经向我们透露了产品的关键信息,接下来我将详细解释这些信息。 首先,“可莱特”很可能是产品品牌的名称,代表着该系列产品的生产商。在选择信号...

    wml教程(手机开发手册)

    - **Wireless Application Environment (WAE)**: 包含微型浏览器、WML、WMLScript解释器等功能。 - **Wireless Session Layer (WSL)**: 管理会话状态。 - **Wireless Transaction Layer (WTP)**: 提供可靠的事务处理...

    WAP-1.0-WML.rar

    "**WAP-1.0-WML.pdf**" 文件很可能包含了对WAP 1.0技术和WML语言的详细解释,包括但不限于WAP的架构、WML的语法、实际应用示例以及可能的局限性和改进。这份资料可能是开发者指南、教程或技术白皮书,对于了解和学习...

Global site tag (gtag.js) - Google Analytics