网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > J2EE/J2ME
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.Tomcat入门指南.
.J2EE应用服务器Jboss + Tomcat安.
.J2ME入门-(6)CLDCAPI.
.J2EE常见问题.
.J2EE实用技巧:提升JSP应用程序的.
.利用HSQLDB 进行Hibernate单元测.
.快速创建Webapp.
.J2ee程序中的面向对象设计.
.如何用IIS来实现OTA下载.
.JDBC概述(二).
.使用 MIDP 列表组件.
.用J2ME实现简单电子邮件发送功能.
.在Spring中使用JDBC.
.EnterpriseJavaBeans导论五.
.J2me性能优化,避免内存溢出小结.
.J2ME入门-(10)CDCAPI.
.用RMS存储游戏积分.
.J2ME中查表法使用三角函数.
.J2EETM蓝图摘要.
.小议在Servlet中如何捕获Session.

手机开发教您使用JSR172解析XML

发表日期:2007-12-23



  Sony EriCsson发布了更好支持企业级应用程序开发的新JSR,这其中就包括J2ME Web Service 1.0(JSR 172),索尼爱立信的W600就支持了JSR172。本文讲述如何使用JSR 172提供的API来解析XML。
  
  我们知道JSR172是由两个部分组成的:
  
  1. 一个轻量级的标准XML解析器
  
  2. Web Services的远程调用API
  
  其中这个JSR172实现的轻量级的XML解析器是JAXP1.2(Java API for XML Processing)的一个子集。我们可以查看WTK提供的API看到j2me-xml提供的类一共只有12个,这说明这个轻量级的XML解析器是适合在移动电话这种资源受限设备上运行的。下面我们通过一个例子介绍如何使用JSR 172解析XML,首先我们需要准备一个XML文件放在项目当中,内容如下:
  
  诺基亚7610 黑色
  
  值得注意的是当XML文件中包含汉字的时候,我们应该使用文本工具,比如notepad或者Ultral Edit等把它转换成UTF-8编码文件,否则解析的结果将包含乱码。为了保存XML文件中的信息,我们构造一个普通的Java类Phone,它包含两个成员变量分别对应name和colour,代码如下所示:
  
  /*
  * Phone.java
  *
  * Created on 2005年8月6日, 下午9:40
  *
  * To change this template, choose Tools Options and locate the template under
  * the Source Creation and Management node. Right-click the template and choose
  * Open. You can then make changes to the template in the Source Editor.
  */
  
  /**
  *
  * @author Administrator
  */
  public class Phone {
  
  private String colour = "";
  private String name = "";
  /** Creates a new instance of Phone */
  public Phone() {
  }
  
  public String getColour() {
  return colour;
  }
  
  public void setColour(String colour) {
  this.colour = colour;
  }
  
  public String getName() {
  return name;
  }
  
  public void setName(String name) {
  this.name = name;
  }
  
  }
  
  在JSR 172中实现的是SAX模式的解析器,它和DOM模式的不同在于,SAX解析器按照顺序解析文件并不保存其内容,而DOM解析器则是首先把XML文件解析后存储在一个对象树中,可见DOM模式更加耗费内存资源。能够解析XML之前首先需要创建SAXParser的实例,
  
  SAXParserFactory factory = SAXParserFactory.newInstance();
  SAXParser saxParser = factory.newSAXParser();
  
  接下来我们要获得XML文件的输入流,并把它作为其中一个参数传递给saxParser的parse方法,
  
  InputStream is = this.getClass().getResourceAsStream("phone.xml");
  saxParser.parse(is,new BasicHandler(this));
  
  那么SAXParser是如何解析xml文件的呢?DefaultHandler是SAX2默认的事件处理器基类,用于处理XML解析事件的方法如下:
  
  startDocument()
  startElement(java.lang.String uri,
  java.lang.String localName, java.lang.String qName, Attributes attributes)
  characters(char[] ch, int start, int length)
  endElement(java.lang.String uri,
  java.lang.String localName, java.lang.String qName)
  endDocument()
  
  默认情况下,DefaultHandler的上述方法什么也不做,因此我们必须自己扩展DefaultHandler并且覆盖上述的方法。我们的程序中提供了一个BasicHandler用来处理xml文件。class BasicHandler extends DefaultHandler在BasicHandler类中有两个成员变量
  
  private Vector phones = new Vector();
  private Stack tagStack = new Stack();
  
  phones用来存储我们已经解析出来的Phone对象,tagStack则用来存放我们解析到的元素名称,比如sonyericsson,phone,name,colour等。在文档解释结束后,也就是在endDocument()方法内我们把解析的结果显示在手机屏幕上,为了让读者可以更清楚地明白SAX解析器的解析顺序,这里笔者用了一些打印语句来把重要的信息打印出来,BasicHandler的几个重要方法如下:
  
  public void startDocument() throws SAXException {}
  
  public void startElement(String uri, String localName,
  String qName, Attributes attributes) throws SAXException {
  System.out.println("the qName is "+qName);
  if(qName.equals("phone")) {
  Phone phone = new Phone();
  phones.addElement(phone);
  }
  
  tagStack.push(qName);
  System.out.println("the tag stack's length is "+tagStack.size());
  }
  
  public void characters(char[] ch, int start, int length)
  throws SAXException {
  String chars = new String(ch, start, length).trim();
  System.out.println("the character is "+chars);
  
  if(chars.length() > 0) {
  String qName = (String)tagStack.peek();
  
  Phone currentPhone = (Phone)phones.lastElement();
  
  if (qName.equals("name")) {
  currentPhone.setName(chars);
  } else if(qName.equals("colour")) {
  currentPhone.setColour(chars);
  }
  }
  }
  
  public void endElement(String uri, String localName, String qName)
  throws SAXException {
  System.out.println("the end qName is "+qName);
  tagStack.pop();
  }
  
  public void endDocument() throws SAXException {
  StringBuffer result = new StringBuffer();
  for (int i=0; i
  Phone currentPhone = (Phone)phones.elementAt(i);
  result.append(currentPhone.getName() + " 是 " + currentPhone.getColour() + "\n");
  }
  
  helloXML.alert(result.toString());
  }
  
  总结:本文讲述了如何使用JSR 172提供的轻量级XML解析器来解析XML,并给出了具体的代码。下篇文章我们将一起学习一下如何使用Web Services的远程调用API。

(出处:)


上一篇:全面研读EJB2.0 人气:640
下一篇:J2MEMobile3D入门教程系列文章之二 人气:718
浏览全部J2EE/J2ME的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐