- 浏览: 2111246 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
ratlsun:
想请教下uc最新版本在android4.2和4.3版本上是不是 ...
UC浏览器8.3 (for iPhone)设计理念.“無”为而设 -
gly0920sky520123:
很有用哦,谢谢
DOS命令大全(经典收藏) -
chenyu0748:
UC加油,花哥加油~
UC浏览器8.3 (for iPhone)设计理念.“無”为而设 -
cnliuyix:
LZ搞点更有层次的吧,介个一般工程里根本用不到这么简单的。Si ...
Android 设计一个可单选,多选的Demo -
gang4415:
rgz03407@163.com
JSR规范,系统参数测试大全
作者:wuhua
空间:htt://wuhua.3geye.net
转载请保留上面的信息(请尊重知识产品)谢谢
相信大家都用过Kxml的东西了,不过个人感觉kxml还是大了些。现在介绍一个比kxml跟简介的xml的类。对于一些小项目,或者对xml解释要求不是很高的项目来说却是个不错的选择。
下面看看那代码与Demo吧。
package org.gggeye.easymf.xml; import java.util.Enumeration; import java.util.Vector; /** * * @author wuhua * <a href="http://wuhua.3geye.net">我的博客</a> * */ public class XMLParser { private XMLNode root=null; private XMLNode exeNode=null; private int offset=0; private String xml=""; private int xmlLength=0; private String version="1.1"; private String encoding="UTF-8"; public XMLParser(String xml){ this.xml=xml; this.xmlLength=xml.length(); } public char getNextCharacter(){ char rt= xml.charAt(offset); offset++; return rt; } /** *//** * 判断下一字符是否为指定字符token * @param token * @return */ private boolean match(char token){ for(int i=offset;i<this.xmlLength;i++){ char tc=xml.charAt(i); if (tc!=' '){ if (tc==token){ return true; }else{ return false; } } } return false; } private String getDescription(){ skipSpace(); StringBuffer desc=new StringBuffer(); while(offset<this.xmlLength-2){ char tc1=this.getNextCharacter(); if (tc1=='-'){ if ((xml.charAt(offset)=='-')&&(xml.charAt(offset+1)=='>')){ offset+=2; return desc.toString(); } }else{ desc.append(tc1); } } return null; } /** *//** * 获取Node名称 * @return */ private String getNodeName(){ skipSpace(); char[] name=new char[120];// int i=0; while(i<120){ char tc=getNextCharacter(); if ((tc==' ')||(tc=='>')||(tc=='/')){ if (i>0) return new String(name).trim(); }else { name[i]=tc; i++; if (i>120){ System.err.println("NODE NAME长度只能小于120"); return null; } } } return null; } /** *//** * 获取属性信息 * */ private void getAttributes(){ skipSpace(); StringBuffer name=new StringBuffer(); StringBuffer value=new StringBuffer(); boolean isAttribute=false; while(offset<this.xmlLength){ char tc1=this.getNextCharacter(); if (tc1=='='){ skipSpace(); char tc2=this.getNextCharacter(); if (tc2=='"'){//获取属性值 isAttribute=true; while(offset<this.xmlLength){ char tc3=this.getNextCharacter(); if (tc3=='"'){ this.exeNode.setAttribute(name.toString(),value.toString()); this.skipSpace(); value.delete(0,value.length()); name.delete(0,name.length()); break; }else value.append(tc3); } } }else if (tc1=='/'){ skipSpace(); char tc2=this.getNextCharacter(); if (tc2!='>'){ System.err.println("/必须使用>来封闭"); }else{ this.exeNode=this.exeNode.getParent(); break; } }else if (tc1=='>'){ break; }else{ name.append(tc1); } } } private int skipSpace(){ int skipCount=0; while(offset<xml.length()){ char tc=xml.charAt(offset); if ((tc!=' ')&&(tc!=' ')&&(tc!=' ')){ return skipCount; }else{ offset++; skipCount++; } } return skipCount; } private String getValue(){ StringBuffer value=new StringBuffer(); value.append(xml.charAt(offset-1)); while(offset<xml.length()){ char tc=this.getNextCharacter(); value.append(tc); if (xml.charAt(offset)=='<'){ return value.toString().trim(); } } return null; } private void getXMLHeader(){ this.skipSpace(); if ((this.xml.charAt(offset)=='<')&&(this.xml.charAt(offset+1)=='?')){ int idx=this.xml.indexOf("version"); if (idx>0){ boolean start=false; StringBuffer tmp=new StringBuffer(); for(int i=idx+8;i<this.xmlLength;i++){ char tc=this.xml.charAt(i); if (tc=='"'){ if (start==false){ start=true; }else{ break; } }else{ if (start) tmp.append(tc); } } this.version=tmp.toString(); } idx=this.xml.indexOf("encoding"); if (idx>0){ boolean start=false; StringBuffer tmp=new StringBuffer(); for(int i=idx+9;i<this.xmlLength;i++){ char tc=this.xml.charAt(i); if (tc=='"'){ if (start==false){ start=true; }else{ break; } }else{ if (start) tmp.append(tc); } } this.encoding=tmp.toString(); } int end=this.xml.indexOf("?>"); offset=end+2; } } public XMLNode parse(){ getXMLHeader(); while(offset<this.xmlLength){ this.skipSpace(); char token=getNextCharacter(); if (token=='<'){ if (match('!')){ getNextCharacter(); char tc=getNextCharacter(); if (tc=='-'){ tc=getNextCharacter(); if (tc=='-'){ //System.out.println("注释行"); String desc=getDescription(); if (this.exeNode!=null) this.exeNode.setDescription(desc); }else{ System.err.println("语法错误在"+offset); return null; } } }else if (match('/')){ String nodeName=this.getNodeName(); if (exeNode.getName().equalsIgnoreCase(nodeName)) exeNode=exeNode.getParent(); else{ System.err.println("期望封闭标签为:"+exeNode.getName()+",实际标签为:"+nodeName); return null; } }else{ String name=this.getNodeName(); XMLNode newNode=new XMLNode(name); if (root==null){ root=newNode; exeNode=root; }else{ exeNode.addChild(newNode); exeNode=newNode; } char tc=this.xml.charAt(offset-1); if (tc==' ') getAttributes(); else{ if (tc!='>') System.err.println(exeNode.getName()+"期待关闭"); } } }else{ exeNode.setValue(getValue()); } } return root; } public static void main(String[] args){ String xml="<?xml version=\"1.0\" encoding=\"GB2312\"?>" + "<!--注释行--><root desc=\"一个测试的例子\"><book name=\"test\" " + "value=\"我的\"/><book name=\"跌而\">我的值</book></root>"; XMLParser parser=new XMLParser(xml); XMLNode root=parser.parse(); System.out.println(root.getName()); Vector nodes = root.getChildNodes(); load(nodes); // System.out.println(root.toString()); } static void load(Vector _nodes){ System.out.println(_nodes); for(int i=0; i<_nodes.size(); i++){ XMLNode tNode = (XMLNode) _nodes.elementAt(i); System.out.println(tNode.getName()); Enumeration keys=tNode.getAttributes().keys(); while(keys.hasMoreElements()){ String key=(String)keys.nextElement(); String value= tNode.getAttribute(key); System.out.println(" "+ key+ "=" + value + " "); } System.out.println(tNode.getValue()); } } }
package org.gggeye.easymf.xml; import java.util.Enumeration; import java.util.Hashtable; import java.util.Vector; /** * XML Node * @author wuhua * <a href="http://wuhua.3geye.net">我的博客</a> * */ public class XMLNode { private String name; private XMLNode parent; private String value; private String description; private Hashtable attributes=new Hashtable(); private Vector childNodes=new Vector(); public XMLNode(String name){ this.name=name; } public String getName(){ return this.name; } public void setName(String name){ this.name=name; } public String getValue(){ return this.value; } public void setValue(String value){ this.value=value; } public void setAttribute(String name,String value){ this.attributes.put(name,value); } public String getAttribute(String attributeName){ return (String)attributes.get(attributeName); } public void setDescription(String desc){ this.description=desc; } public String getDescription(){ return this.description; } public void setParent(XMLNode parent){ this.parent=parent; } public XMLNode getParent(){ return this.parent; } public void addChild(XMLNode childNode){ this.childNodes.addElement(childNode); childNode.setParent(this); } public String toString(){ StringBuffer xml=new StringBuffer(); if ((this.getDescription()!=null)&&(this.getDescription().length()>0)) xml.append("<!--"+this.getDescription()+"--> "); xml.append("<"); xml.append(this.getName()); Enumeration keys=this.attributes.elements(); while(keys.hasMoreElements()){ String key=(String)keys.nextElement(); String value=(String)this.attributes.get(key); xml.append(" "+ key+ "=" + value + " "); } if (((this.getValue()==null)||(this.getValue().length()==0))&&(this.childNodes.size()==0)){ xml.append(" /> "); }else{ xml.append(" >"); if ((this.getValue()!=null)&&(this.getValue().length()>0)){ xml.append(this.getValue()); } for(int i=0;i<this.childNodes.size();i++) xml.append(((XMLNode)this.childNodes.elementAt(i)).toString()); xml.append("</"+this.getName()+"> "); } return xml.toString(); } public Hashtable getAttributes() { return attributes; } public Vector getChildNodes() { return childNodes; } }
类就两个。很简单
看看Demo吧。
String _res = Tools.toUTFString(Tools.read(this.getClass(). getResourceAsStream(_url))); XMLParser tXMLParser = new XMLParser(_res); XMLNode tXMLNode= tXMLParser.parse(); PlayerItem tMp4 = new PlayerItem(tXMLNode.getAttribute("name"), tXMLNode.getAttribute("encode")); for(int i=0; i<tXMLNode.getChildNodes().size(); i++){ XMLNode tNode = (XMLNode) tXMLNode.getChildNodes().elementAt(i); tMp4.addQueue(tNode.getValue()); } PlayerPanel tMP4Panel = new PlayerPanel(tMp4, getPlayerList()); tMP4Panel.show(); 上面的例子是我从自己实现了一个J2ME流媒体播放器抽出来的,大家凑合着看。
解释就这么简单。欢迎大家讨论。有啥需要讨论的东西,留言沟通
发表评论
-
汉字点阵字库原理
2011-01-28 10:09 3380一、 汉字编码 1. ... -
如何通过改jad和Manifest把其它手机的java游戏改成N830的
2011-01-25 10:21 1358首先要明确一点,不是所有的游戏都能改的。 <200 ... -
索爱手机IMSI序列号获取
2011-01-20 11:29 1954国际移动用户识别码(I ... -
J2ME数组的复制及连接操作
2010-11-19 10:47 1263public class Arrays { /** ... -
手机 J2ME MIDP 性能测试工具(MIDP BenchMark)
2010-11-19 10:35 1457JavaME Test Suitehttp://www.dog ... -
SocketConnection 参数详细介绍
2010-03-23 11:34 2128请大家看下面的代码: len = is.read(gDat ... -
J2ME使用Socket通过cmwap接入点访问安全HTTPS
2010-03-17 16:36 484这个问题是在我升级J2ME版XHTML浏览器的时候被引入的 ... -
一些很特别的J2ME开源项目(转
2010-03-11 09:43 2353StrutsME 一个轻量级的序列化协议,使J2ME客户端能调 ... -
WMLC 检查charset编码
2009-12-16 15:27 180http://www.iana.org/assignments ... -
Eclipse快捷键
2009-12-01 10:38 1413编辑相关快捷键 Eclipse的编辑功能非常强大,掌 ... -
改善你的J2ME程序界面-使用开源UI库
2009-09-03 16:45 3696J2ME自带UI不是太美观,使用起来也不太方面,为了解决这 ... -
LZW数据压缩算法的原理分析【转】
2009-08-05 19:31 2568转一篇好文章, 原文地址:http://www.cnblog ... -
<a> 标签,target="blank",target="_blank" 的区别。
2009-05-27 13:00 11548在编写html代码的时候。 target="bla ... -
贡献 高效的MIDlet 编程
2009-05-23 15:32 1898从网上找到这本资料。 是E文版的。 大家顺便锻炼下E文 -
How to use pop-up TextBox in Java ME
2009-05-23 13:44 1772Overview One of the Displayabl ... -
How to use freely resizable font in in Java ME
2009-05-23 13:41 1329Contents [hide] 1 Overview 2 ... -
A Simple Ordered Hashtable
2009-05-23 12:08 1553This article illustrates how to ... -
开发NokiaS40系列应用程序初级篇
2009-05-22 18:56 1717本文讲述如何搭建Nokia S40系列手机应用程序的开发环境 ... -
索尼爱立信手机在 J2ME 程序中的字体大小
2009-05-18 16:25 1340之前有朋友问到索尼爱立信手机在 J2me 程序中的字体大小,请 ... -
If-Modified-Since & If-None-Match
2009-05-13 11:01 14547google告诉网站站长:您 ...
相关推荐
标题"xml.rar_j2me_j2me_xml_java_xml_j2me"暗示了这是一个针对J2ME平台的XML处理解决方案,可能包含轻量级的解析器和示例应用。 描述中提到的"j2me上的微型解析器"指的是专为J2ME设计的XML解析库,旨在在内存有限...
标题"Jaxp_xml.rar_J2ME程序_j2me_j2me_xml_j2me网络"表明这个压缩包包含了一个示例,演示如何使用JAXP(Java API for XML Processing)在J2ME环境中解析XML文件。JAXP是Java平台上的一个标准接口,用于处理XML文档...
**标题:“kuixdemo-1.0.0 (J2ME下解析xml文件)”,意味着这是一个专门用于在Java 2 Micro Edition (J2ME)环境中解析XML文件的示例程序。** **描述:“在J2ME下对XML文件进行解析的示例源码及帮助文件”指出,该...
5. **持久化应用**:在J2ME中,持久化数据存储可以通过Record Management System(RMS)实现,这是一个简单的键值对存储系统。开发者也可以使用文件系统或SQLite数据库(如JSR-172)进行更复杂的数据管理。 6. **...
KXML是一个轻量级的XML解析库,专为Java ME(J2ME)和Android平台设计。在J2ME版WAP浏览器中,KXML用于解析WAP服务器返回的XML数据,这些数据通常包含网页的结构和内容。KXML提供了DOM(Document Object Model)和...
总结来说,J2ME应用移植到Android是一项涉及多方面工作的任务,需要对两个平台的特性有深入理解。虽然过程可能会遇到挑战,但通过合理规划和逐步实施,可以成功地将J2ME应用带到更广泛的Android用户群体中。提供的...
J2ME通过JSR 82(Java API for Bluetooth Wireless Technology)和JSR 118(Java API for XML Processing, JAXP)等规范支持网络和蓝牙通信。MIDP 2.0引入了HttpConnection接口,允许应用程序通过HTTP协议发送请求和...
TinyLine SDK是一个开源项目,专门为J2ME平台设计,能够高效地解析和渲染MobileSVG文件。 3. **XML属性文件的解析**:地图的属性数据采用XML文件存储,客户端通过KXML 2.0开发包进行解析。KXML是一款轻量级的XML...
J2ME,全称Java 2 Micro Edition,是Java平台的一个子集,主要用于嵌入式设备和移动设备的开发,如早期的智能手机和平板电脑。在J2ME中,开发人员可以构建功能丰富的应用程序,其中包括使用GPS(全球定位系统)功能...
Eclipse J2ME插件是Eclipse集成开发环境(IDE)的一个扩展,专门用于支持Java 2 Micro Edition(J2ME)应用的开发。J2ME是Java平台的一个子集,设计用于资源有限的设备,如移动电话、智能手表和嵌入式系统。通过这个...
J2ME是Java的一个子集,用于开发和部署在移动设备、消费电子设备和嵌入式系统上的应用程序。它由Connected Limited Device Configuration (CLDC) 和 Mobile Information Device Profile (MIDP) 组成,CLDC提供了基本...
开发者可以利用J2ME的JAX-RPC(Java API for XML-RPC)或者KXML库来构建和消费Web服务。理解XML解析、HTTP通信以及如何封装和解封装SOAP消息是实现J2ME Web服务的关键。 二、API J2ME提供了一系列的API,如MIDP...
J2ME Web Services XML (JSR 172) Java APIs for Bluetooth (JSR 82) Location API (JSR 179) MID Profile 2.0 (JSR-118) Mobile Media API 1.1 (JSR-135) Mobile 3D Graphics API (JSR184) PDA Pim 1.0...
Java 2 Micro Edition(J2ME)是Java平台的一个重要组成部分,专门设计用于在嵌入式设备、移动电话和智能家电等资源有限的环境中运行应用程序。本教程旨在为初学者提供全面的J2ME学习资源,帮助他们快速掌握J2ME开发...
Java 2 Micro Edition(J2ME)是Java平台的一个子集,主要用于开发在移动设备、嵌入式系统等资源有限的环境中的应用程序。作为一个初学者,掌握J2ME编程的七种关键技术对于踏入这个领域至关重要。以下将详细解释这些...
"j2me处理xml的jar包(kxml2-2.3.0.jar)"是专为J2ME环境设计的一个轻量级XML解析库,它允许开发者在资源有限的移动设备上有效地解析和生成XML文档。这个库的名称为KXML2,版本号为2.3.0,提供了与Java标准版(Java ...
J2ME Web Services XML (JSR 172) Java APIs for Bluetooth (JSR 82) Location API (JSR 179) MID Profile 2.0 (JSR-118) Mobile Media API 1.1 (JSR-135) Mobile 3D Graphics API (JSR184) PDA Pim 1.0 (JSR ...
此外,J2ME的用户界面通常基于Wireless Toolkit(WTK)进行开发,这是一个强大的模拟器,允许开发者在没有实际设备的情况下测试MIDlets。WTK提供了一系列工具,包括编译器、模拟器和设备配置文件,以适应不同的移动...
J2ME提供了JSR-82(Java Wireless Technology SDK for Bluetooth)规范,它包含了一个API用于访问蓝牙和无线定位服务,包括GPS。 **6. 定位和路径规划** 使用GPS数据,我们可以确定设备的当前位置。结合Google Maps...
"org"目录通常代表了一个Java包结构,其中可能包含了解析器的源代码文件。在这个目录下,我们可能会找到与M2MXML解析相关的类,如XML解析器类、节点处理类、事件驱动模型实现等。通过查看这些源码,开发者可以学习到...