动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
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!
当前位置 > 网站建设学院 > 网络编程 > Java教程
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,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息



本月文章推荐
.详解java源文件涉及到的package问.
.JAVA经典实例--连接字符串.
.跟你一起分析JAVA中文比较问题的.
.经典J2EE开发工具-IBMEclipse简.
.控制bean定制器的技巧.
.JDBMonitor全攻略.
.Swing 第三方工具设计.
.Java 中 this 的使用.
.tomcat深入??内部结构描述.
.利用javamail收取Hotmail的退信.
.写Java程序最容易犯的21种错误例.
.初评hibernate.
.J2ME编程最佳实践之联网开发.
.多语言混显的问题.
.Eclipse Forms设计漂亮UI之简介.
.Java语言基础 对于JAVA基础知识精.
.item 方法.
.Wicket初次接触2之Navomatic.
.使用JBoss Eclipse IDE开发J2EE应.
.Unicode编码 解释UCS、UTF、BMP、.

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

发表日期:2008-1-5 |



  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。
上一篇:总结Sync4j的Nokia手机实践结果 人气:341
下一篇:Nokia Suite 3.0 for J2ME功能介绍 人气:446
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-24 Sablog-X v2.0 预览版
2008-7-24 帝国备份王EmpireBak 2008 正式版
2008-7-24 网趣网上购物系统时尚版 v8.2
2008-7-24 纵横B2B电子商务系统XYECS!B2B v
2008-7-24 e路小说小偷 v1.2.0723
2008-7-24 凌风美女图片站程序 v2.2
2008-7-24 TOM15电影收索程序
2008-7-24 清风信息自动采集生成系统 v1.0
2008-7-24 QQ邮箱编辑器 v1.0 (小小菜刀ASP
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵