- 浏览: 5826797 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (890)
- WindowsPhone (0)
- android (88)
- android快速迭代 (17)
- android基础 (34)
- android进阶 (172)
- android高级 (0)
- android拾遗 (85)
- android动画&效果 (68)
- Material Design (13)
- LUA (5)
- j2me (32)
- jQuery (39)
- spring (26)
- hibernate (20)
- struts (26)
- tomcat (9)
- javascript+css+html (62)
- jsp+servlet+javabean (14)
- java (37)
- velocity+FCKeditor (13)
- linux+批处理 (9)
- mysql (19)
- MyEclipse (9)
- ajax (7)
- wap (8)
- j2ee+apache (24)
- 其他 (13)
- phonegap (35)
最新评论
-
Memories_NC:
本地lua脚本终于执行成功了,虽然不是通过redis
java中调用lua脚本语言1 -
ZHOU452840622:
大神://处理返回的接收状态 这个好像没有监听到 遇 ...
android 发送短信的两种方式 -
PXY:
拦截部分地址,怎么写的for(int i=0;i<lis ...
判断是否登录的拦截器SessionFilter -
maotou1988:
Android控件之带清空按钮(功能)的AutoComplet ...
自定义AutoCompleteTextView -
yangmaolinpl:
希望有表例子更好。。。,不过也看明白了。
浅谈onInterceptTouchEvent、onTouchEvent与onTouch
最近做项目,服务器传过来的都是Xml格式的数据,需要解析xml,本来使用的是jsr182这个包,没问题(唯一不足的是手机顽童不支持jsr182,当碰到解析xml数据时,模拟器一闪而过!)。后来看到KXML这个第三方包,听说效率不错,于是用了,结果导入该jar包后总是出现java.lang.NoClassDefFoundError: org/xmlpull/v1/XmlPullParserException
很是郁闷!于是干脆下载了源代码,把源代码copy到工程中,运行没问题。
另外nanoXML也可以解析xml,它是一次性加载数据然后解析,当数据量大的时候估计内存吃不消。还有nanoXML的源码中怎么有j2se的类?直接导致我彻底放弃nanoXML。
下面是我用KXML做的代码,大家可以参考:
当然,像上面的startXXX(),endXXX()需要自己实现,最好做成接口!
我访问上面的地址返回的xml为:
最后,提供KXML源码:
很是郁闷!于是干脆下载了源代码,把源代码copy到工程中,运行没问题。
另外nanoXML也可以解析xml,它是一次性加载数据然后解析,当数据量大的时候估计内存吃不消。还有nanoXML的源码中怎么有j2se的类?直接导致我彻底放弃nanoXML。
下面是我用KXML做的代码,大家可以参考:
import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import javax.microedition.io.Connector; import javax.microedition.io.HttpConnection; import org.kxml2.io.KXmlParser; import org.xmlpull.v1.XmlPullParserException; public class Connection implements Runnable{ private boolean isProxy = false; //是否使用代理 private HttpConnection conn=null; private String url; private String sendDate; private int connTimes = 0; public Connection(String url,String sendDate){ this.url=url; this.sendDate=sendDate; } private void send(){ InputStream is = null; try{ if(isProxy){//使用代理 System.out.println("启用http代理连接"); conn = (HttpConnection) Connector.open("http://10.0.0.172/"); conn.setRequestMethod(HttpConnection.GET); conn.setRequestProperty("X-Online-Host", url); conn.setRequestProperty("User-Agent", "Profile/MIDP-2.0 Configuration/CLDC-1.0"); //Proxy-Connection不是RFC标准,但是很多服务器都这么用了 conn.setRequestProperty("Proxy-Connection", "Keep-Alive"); }else{ System.out.println("启用直连"); conn = (HttpConnection) Connector.open("http://"+url); conn.setRequestMethod(HttpConnection.GET); conn.setRequestProperty("User-Agent", "Nokia6500s-1/2.0"); conn.setRequestProperty("X-Up-Calling-Line-ID","13761083826"); } // Connection是针对HTTP1.0的标准,HTTP1.1默认就是keep-alive的,并且该头不允许在1.1里面使用 conn.setRequestProperty("Connection", "Keep-Alive"); conn.setRequestProperty("Content-Type","text/xml;charset=UTF-8"); if(sendDate!=null){ //发送数据 conn.setRequestProperty("Content-Length",String.valueOf(sendDate.length())); DataOutputStream dos = new DataOutputStream(conn.openOutputStream()); dos.write(sendDate.getBytes("UTF-8")); dos.flush(); dos.close(); } //接收数据 if(conn.getResponseCode()==HttpConnection.HTTP_OK){ is=conn.openInputStream(); /* int length = (int) conn.getLength(); System.out.println("length="+length); byte[] data=null; DataInputStream dis=new DataInputStream(is); if (length == -1) { int chunkSize = 1500; byte[] buffer = new byte[chunkSize]; ByteArrayOutputStream baos = new ByteArrayOutputStream(); int dataSizeRead = 0;// size of data read from input stream. while ((dataSizeRead = is.read(buffer)) != -1) { baos.write(buffer, 0, dataSizeRead); } data = baos.toByteArray(); baos.close(); } else if (length == 0) { } else {// known length data = new byte[length]; dis.readFully(data); } String text=null; try { text=new String(data, "UTF-8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("[收到数据]"+text); */ parseXml(is); }else{ System.out.println("无法连接服务器,返回码:"+conn.getResponseCode()); } }catch (Exception e) { // TODO: handle exception System.out.println("重新尝试连接:"+(connTimes+1)); if (connTimes < 2) { connTimes++; isProxy=!isProxy;// send(); } else { connTimes = 0; System.out.println("无法连接服务器"); // Consts.isWaiting=false; // Consts.hasError=true; } }finally{ try { if (is != null) is.close(); if (conn != null) conn.close(); } catch (Throwable t) { System.out.println("Exception occurred while closing input stream."); } } } private void parseXml(InputStream is){ KXmlParser parser = new KXmlParser(); try { parser.setInput(is,"UTF-8"); int eventType=parser.getEventType(); System.out.println("eventType="+eventType); if(eventType==KXmlParser.START_DOCUMENT){ startDocument(parser); } boolean keepParsing = true; while(keepParsing){ int type = parser.next(); switch(type){ case KXmlParser.START_DOCUMENT: //startDocument(parser);//这里总是执行不到,可以去掉 break; case KXmlParser.START_TAG: startElement(parser); break; case KXmlParser.END_TAG: endElement(parser); break; case KXmlParser.TEXT: characters(parser); break; case KXmlParser.END_DOCUMENT: endDocument(parser); keepParsing = false; break; } } } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void startDocument(KXmlParser parser){ } public void endDocument(KXmlParser parser){ } String tagName=null; public void startElement(KXmlParser parser){ this.tagName = parser.getName(); System.out.println("key:" + this.tagName); int attributeCount= parser.getAttributeCount(); String winTermNo=parser.getAttributeValue(null, "winTermNo"); System.out.println("winTermNo="+winTermNo); // for(int i=0;i<attributeCount;i++){ // System.out.println(parser.getAttributeName(i)+":"+parser.getAttributeValue(i)); // } } public void endElement(KXmlParser parser){ } public void characters(KXmlParser parser){ String content = parser.getText(); System.out.println(tagName + ":" + content); if (tagName.equals("lottery")){ System.out.println(content); } else if(tagName.equals("gameInfo")){ System.out.println(content); } this.tagName = null; } public void run() { // TODO Auto-generated method stub send(); } public static void main(String[] args) { // TODO Auto-generated method stub Connection c=new Connection("127.0.0.1:8080/Lottery/kjava.portal?action=lotterySimpleInfo",null); Thread t=new Thread(c); t.start(); } }
当然,像上面的startXXX(),endXXX()需要自己实现,最好做成接口!
我访问上面的地址返回的xml为:
<message> <lottery winTermNo="10098" lotteryResult="0409152528|0405" termNo="10099" deadLine="20100825193000" /> <lottery winTermNo="10228" lotteryResult="000" termNo="10229" deadLine="20100824193000" /> <lottery winTermNo="10228" lotteryResult="00000" termNo="10229" deadLine="20100824193000" /> <lottery winTermNo="10098" lotteryResult="2268381" termNo="10099" deadLine="20100824193000" /> <lottery winTermNo="10073" lotteryResult="33333333333333" termNo="" deadLine="" /> <gameInfo id="1" homeTeam="阿尔科孔" awayTeam="塞尔塔" gameDate="08-30 11:51" leagueMatch="国王杯" /> <gameInfo id="2" homeTeam="皇家贝蒂斯" awayTeam="萨拉曼卡" gameDate="08-30 11:51" leagueMatch="国王杯" /> <gameInfo id="3" homeTeam="弗鲁米嫩塞" awayTeam="帕尔梅拉斯" gameDate="08-30 11:51" leagueMatch="巴甲" /> <gameInfo id="4" homeTeam="弗鲁米嫩塞" awayTeam="帕尔梅拉斯" gameDate="08-30 11:51" leagueMatch="巴甲" /> <gameInfo id="5" homeTeam="弗鲁米嫩塞" awayTeam="帕尔梅拉斯" gameDate="08-30 11:51" leagueMatch="巴甲" /> <gameInfo id="6" homeTeam="弗鲁米嫩塞" awayTeam="帕尔梅拉斯" gameDate="08-30 11:51" leagueMatch="巴甲" /> <gameInfo id="7" homeTeam="弗鲁米嫩塞" awayTeam="帕尔梅拉斯" gameDate="08-30 11:51" leagueMatch="巴甲" /> <gameInfo id="8" homeTeam="弗鲁米嫩塞" awayTeam="帕尔梅拉斯" gameDate="08-30 11:51" leagueMatch="巴甲" /> <gameInfo id="9" homeTeam="弗鲁米嫩塞" awayTeam="帕尔梅拉斯" gameDate="08-30 11:51" leagueMatch="巴甲" /> <gameInfo id="10" homeTeam="弗鲁米嫩塞" awayTeam="帕尔梅拉斯" gameDate="08-30 11:51" leagueMatch="巴甲" /> <gameInfo id="11" homeTeam="弗鲁米嫩塞" awayTeam="帕尔梅拉斯" gameDate="08-30 11:51" leagueMatch="巴甲" /> <gameInfo id="12" homeTeam="弗鲁米嫩塞" awayTeam="帕尔梅拉斯" gameDate="08-30 11:51" leagueMatch="巴甲" /> <gameInfo id="13" homeTeam="弗鲁米嫩塞" awayTeam="帕尔梅拉斯" gameDate="08-30 11:51" leagueMatch="巴甲" /> <gameInfo id="14" homeTeam="弗鲁米嫩塞" awayTeam="帕尔梅拉斯" gameDate="08-30 11:51" leagueMatch="巴甲" /> </message>
最后,提供KXML源码:
- kxml源码.rar (59.1 KB)
- 下载次数: 59
发表评论
-
3个RPG练习,最后一个是卡马克卷轴
2010-12-11 18:02 2368import javax.microedition.lcd ... -
j2me小练习,教学用
2010-12-07 20:42 1855有用的J2ME功能函数 ... -
自己早期做的一个基于j2me的飞行射击类游戏
2010-12-07 20:23 2149早期的代码,MVC思想 -
自己早期做的一个基于j2me的魔塔
2010-12-07 20:13 2123上面一个不完整,但代码好(MVC),但没抽出类; 下面一个比 ... -
j2me中的A*算法
2010-12-02 14:08 2072import javax.microedition.mid ... -
j2me代理连接返回码总是400的问题
2010-09-21 16:24 2775400是因为错误的语法导致服务器无法理解请求信息。 Con ... -
当显示内容过多时的滚屏类Container.java
2010-09-16 11:32 2176很多时候,由于手机屏幕太小,一下子显示不了那么多内容,这个时候 ... -
j2me读取中文的配置文件
2010-09-14 20:25 2174还可以参考这篇文章: http://gundumw100.it ... -
使用jsr172解析xml
2010-09-14 10:40 1971基类: import java.io.ByteArrayI ... -
面向对象的RMS操作
2010-09-14 10:29 1725将需要保存的数据集中起来形成一个model类,并且要实现序列化 ... -
Java版数独算法实现
2010-09-10 16:32 16368数独的历史: 数独前身为“九宫格”,最早起源于中国。数千 ... -
类似小球列表的选择控件(9宫格)
2010-08-27 15:50 1770import javax.microedition.lcd ... -
j2me工具类:TextUtil.java
2010-08-11 21:24 1721import java.util.Vector; i ... -
j2me工具类:Database.java
2010-08-11 21:18 2030/** * <p>Title: & ... -
j2me工具类:ReadFromFile.java
2010-08-11 21:15 4351import java.io.*; import jav ... -
j2me竖向滚动菜单的基本做法
2010-08-11 16:58 2037public class AppCanvas extend ... -
j2me工具类:声音播放类SoundUtil
2010-06-04 23:21 2140用法: 将需要播放的音乐都罗列在name,type数组中,需要 ... -
j2me工具类:PalettedImage调色板类
2010-06-04 22:57 1815该方法网上可以找到,我添加了一个重载函数: public Im ... -
地图编辑器Mappy下载
2010-05-25 22:30 3334简单的手机游戏地图编辑器,共享之。。。 eclipseme下 ... -
将Image对像转换为png格式的byte数组
2010-04-15 12:48 2633原理上说 1 获取Image 的ARGB数据 2将ARGB ...
相关推荐
- 设置输入源:根据XML数据来源(如文件、流或字符串)设置解析器的输入源。 - 遍历XML:通过循环调用next()方法,获取XML事件(如START_TAG、END_TAG等),并根据事件类型进行相应的处理。 6. **示例代码**: `...
《深入理解KXML:解析XML的核心技术》 KXML,全称为Kotlin XML,是一个轻量级、高效的XML解析库,特别适用于Java平台。在Android开发中,由于其小巧的体积和良好的性能,KXML经常被用作XML解析的替代方案。本篇文章...
使用kXML解析XML的基本流程如下: 1. **DOM解析**:如果你选择DOM解析,首先需要创建`XmlPullParserFactory`实例,然后使用`newPullParser()`方法获取`XmlPullParser`对象。接着,调用`setInput()`方法设置输入源...
根据题目中的描述,在使用KXML2解析XML文档时遇到了一个特殊的问题:无法直接提取`<script>`标签中的内容。这主要是因为XML解析器通常会忽略`<script>`标签内的文本内容,将其视为脚本而非普通文本。对于这种情况,...
XML Pull是一种处理XML文档的事件驱动模型,允许开发者通过一系列的读取操作来解析XML数据,而无需构建整个XML文档树。这种解析方式在内存管理和性能上都有优势,尤其适用于资源有限的环境,如移动设备或嵌入式系统...
使用KXML2解析XML的基本步骤如下: 1. 引入库:首先,你需要在项目的类路径中包含kxml2-2.3.0.jar或kxml2-min-2.3.0.jar。 2. 创建解析器:使用`XmlParser`类创建一个解析器对象,通常通过传递输入流(InputStream...
在Android平台,解析XML的方式多种多样,其中之一就是使用kxml2库。kxml2是一个轻量级、快速的XML解析器,适用于资源有限的设备,如移动设备。本文将深入探讨kxml2-2.2.2.jar这一版本的库,揭示其在XML解析中的重要...
通过这些资源,开发者可以学习如何在J2ME环境中读取、解析XML数据,并理解如何处理XML事件,创建XML解析器,以及如何将解析后的数据应用于实际应用。这对于开发需要与服务器交换XML数据的J2ME应用程序,如游戏、信息...
4.1 `org.kxml2.io.KXmlParser`:这是XMLReader的主要实现类,负责解析XML输入流并触发解析事件。 4.2 `org.kxml2.kdom.Node`:这个类是解析结果的基本元素节点,包括元素、文本、注释等。 4.3 `org.kxml2.wap....
在实际开发中,使用KXML2解析XML的步骤大致如下: 1. 创建XMLPullParser对象,通常通过XMLPullParserFactory的newInstance()方法,并指定KXML2的类路径。 2. 调用setInput()方法,传入XML的输入流或字符序列。 3. ...
本资料包“android解析xml源码和ppt”提供了关于Android系统如何解析XML以及相关PPT的深入讲解。以下是关于这个主题的详细知识点: 1. XML解析器类型: - DOM(Document Object Model)解析器:它一次性加载整个...
例如,在Java中,SAX解析可以使用`org.xml.sax`包,DOM解析可以使用`javax.xml.parsers`包,而XML Pull解析可以使用`org.xmlpull.v1`包(如kxml2或StaX)。在实现时,需要根据解析方法的特性编写相应的代码逻辑,...
然后在项目中引入kxml2-2.2.2.jar库,通过XMLPullParser接口解析XML数据,这样可以避免使用更重量级的解析器(如DOM或SAX),从而提高应用性能。 在解析XML时,通常会遵循以下步骤: 1. 创建XMLPullParser实例,...
《深入理解KXML2:解析XML的J2ME利器》 KXML2,作为一个轻量级的XML解析库,尤其在J2ME(Java 2 Micro Edition)环境中,它扮演了重要的角色。J2ME是Java平台的一个子集,主要用于嵌入式设备,如手机、智能手表等,...
XMLPULL解析是一种轻量级、高效的处理XML文档的方法,尤其适用于资源有限的移动设备或嵌入式系统。它提供了一种编程接口,允许...通过这两个库,开发者可以方便地解析XML文档,提取所需的数据,或者生成新的XML文档。
为了高效地解析XML文档,开发者通常会使用解析器库,如KXML2和XMLPull。这两个库在Java环境中为XML解析提供了轻量级、高效的解决方案。 KXML2是一个小型、快速且易于使用的XML解析库,适用于Java ME(移动版Java)...
在Java开发中,处理XML数据是一项常见的任务,无论是读取配置文件、交换数据还是解析XML文档,都需要高效的解析工具。"kxml2-2.3.0.jar" 和 "xmlpull_1_1_3_4c.jar" 是两个关键的库文件,专门用于XML解析。这两个库...
总的来说,KXML2-2.2.2为Android开发者提供了一种高效且灵活的XML解析方案,特别是对于那些希望避免使用DOM解析导致内存开销过大的项目。通过掌握Pull解析的基本原理和KXML2库的使用,开发者可以更好地优化应用程序...
标题 "kxml doc" 暗示我们关注的是一个与 kxml 相关的技术文档,kxml 是一个轻量级的 XML 解析库,主要在 Java 平台上使用。这个库允许开发者处理 XML 文档而无需依赖大型的解析器如 JDOM 或 DOM。在 Android 开发中...