- 浏览: 5819690 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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
基类:
使用jsr182解析xml,最主要的还是要实现characters()和startElement()方法。
startElement()方法中可以使用attributes.getValue("XXX")获得属性值;
characters()方法中使用String chars = new String(ch, start, length).trim();获得文本。
至于endElement()和endDocument()方法,可以在其中实现一些“收尾”工作。
具体的实现类可以参考下面这个类:
用法:
import java.io.ByteArrayInputStream; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public abstract class BaseHandler extends DefaultHandler { public abstract boolean parse(byte[] byteAarray); public static void parserXml(BaseHandler baseHandler, byte[] byteAarray) throws Exception { if (byteAarray == null || byteAarray.length == 0) return; ByteArrayInputStream bis = new ByteArrayInputStream(byteAarray); SAXParserFactory factory = SAXParserFactory.newInstance(); factory.newSAXParser().parse(bis, baseHandler); bis.close(); } public abstract void characters(char[] ch, int start, int length) throws SAXException; public abstract void endDocument() throws SAXException; public abstract void endElement(String uri, String localName, String name) throws SAXException; public abstract void startDocument() throws SAXException; public abstract void startElement(String uri, String localName, String tagName, Attributes attributes) throws SAXException; }
使用jsr182解析xml,最主要的还是要实现characters()和startElement()方法。
startElement()方法中可以使用attributes.getValue("XXX")获得属性值;
characters()方法中使用String chars = new String(ch, start, length).trim();获得文本。
至于endElement()和endDocument()方法,可以在其中实现一些“收尾”工作。
具体的实现类可以参考下面这个类:
import java.util.Stack; import java.util.Vector; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import com.tlt.app.App; import com.tlt.model.Supplement; import com.tlt.model.User; import com.tlt.util.Consts; import com.tlt.view.SupplementPage; import com.tlt.view.item.Dialog; public class SupplementHandler extends BaseHandler { public boolean parse(byte[] byteAarray) { // TODO Auto-generated method stub try { super.parserXml(this, byteAarray); return true; } catch (Exception e) { e.printStackTrace(); return false; } } public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub String chars = new String(ch, start, length).trim(); // System.out.println("the character is "+chars); if(chars.length() > 0) { String tagName = (String)tagStack.peek();//查看栈顶对象而不移除它 Supplement current = (Supplement)supplements.lastElement(); //<message><head><messageId>20100825110225890</messageId><result>0000</result><encryptionType>0</encryptionType><md>bdc5e43a0368c0ea8400960ed75d088a</md></head><body><orderId>TX201008251102240001</orderId><billNo>20100825110225890</billNo><userId>50</userId><fundsAccount>33900</fundsAccount><time>20100825110224</time><reserve></reserve></body></message> if (tagName.equals("messageId")) { current.setMessageId(chars); }else if(tagName.equals("result")){ current.setResult(chars); }else if(tagName.equals("encryptionType")){ current.setEncryptionType(chars); }else if(tagName.equals("md")){ current.setMd(chars); } else if(tagName.equals("errorMsg")) { current.setErrorMsg(chars); }else if(tagName.equals("orderId")) { current.setOrderId(chars); }else if(tagName.equals("billNo")) { current.setBillNo(chars); }else if(tagName.equals("userId")) { current.setUserId(chars); }else if(tagName.equals("fundsAccount")) { current.setFundsAccount(chars); }else if(tagName.equals("time")) { current.setTime(chars); }else if(tagName.equals("reserve")) { current.setReserve(chars); } } } public void endDocument() throws SAXException { // TODO Auto-generated method stub Consts.hash.put("supplement", supplements.lastElement()); Supplement supplement=(Supplement)supplements.lastElement(); if(supplement.getResult().equals(Consts.result)){ SupplementPage.resultDialog=new Dialog(App.app.canvas,"消息","充值成功!",0); User user=(User)Consts.hash.get("user"); user.setFundsAccount(supplement.getFundsAccount()); Consts.hash.put("user", user);//更新user SupplementPage.reset(); }else{ SupplementPage.resultDialog=new Dialog(App.app.canvas,"消息","充值失败!"+supplement.getErrorMsg(),0); } supplements=null; } public void endElement(String uri, String localName, String name) throws SAXException { // TODO Auto-generated method stub tagStack.pop();//移除栈顶对象并作为此函数的值返回该对象 } public void startDocument() throws SAXException { // TODO Auto-generated method stub } private Stack tagStack = new Stack(); private Vector supplements = new Vector(); public void startElement(String uri, String localName, String tagName, Attributes attributes) throws SAXException { // TODO Auto-generated method stub if(tagName.equals("message")) { Supplement entity = new Supplement(); supplements.addElement(entity); }if (tagName.equals("lottery")) { LotterySimpleInfo instance=new LotterySimpleInfo(); instance.setWinTermNo(attributes.getValue("winTermNo")); instance.setLotteryResult(attributes.getValue("lotteryResult")); instance.setTermNo(attributes.getValue("termNo")); instance.setDeadLine(attributes.getValue("deadLine")); lotterys.addElement(instance); } tagStack.push(tagName); } }
用法:
BaseHandler handler=new LoginHandler(); handler.parse(data);
发表评论
-
3个RPG练习,最后一个是卡马克卷轴
2010-12-11 18:02 2361import javax.microedition.lcd ... -
j2me小练习,教学用
2010-12-07 20:42 1844有用的J2ME功能函数 ... -
自己早期做的一个基于j2me的飞行射击类游戏
2010-12-07 20:23 2129早期的代码,MVC思想 -
自己早期做的一个基于j2me的魔塔
2010-12-07 20:13 2102上面一个不完整,但代码好(MVC),但没抽出类; 下面一个比 ... -
j2me中的A*算法
2010-12-02 14:08 2065import javax.microedition.mid ... -
j2me代理连接返回码总是400的问题
2010-09-21 16:24 2769400是因为错误的语法导致服务器无法理解请求信息。 Con ... -
当显示内容过多时的滚屏类Container.java
2010-09-16 11:32 2168很多时候,由于手机屏幕太小,一下子显示不了那么多内容,这个时候 ... -
j2me读取中文的配置文件
2010-09-14 20:25 2166还可以参考这篇文章: http://gundumw100.it ... -
面向对象的RMS操作
2010-09-14 10:29 1714将需要保存的数据集中起来形成一个model类,并且要实现序列化 ... -
Java版数独算法实现
2010-09-10 16:32 16360数独的历史: 数独前身为“九宫格”,最早起源于中国。数千 ... -
使用KXML解析xml数据
2010-09-10 13:05 9335最近做项目,服务器传过来的都是Xml格式的数据,需要解析xml ... -
类似小球列表的选择控件(9宫格)
2010-08-27 15:50 1763import javax.microedition.lcd ... -
j2me工具类:TextUtil.java
2010-08-11 21:24 1710import java.util.Vector; i ... -
j2me工具类:Database.java
2010-08-11 21:18 2022/** * <p>Title: & ... -
j2me工具类:ReadFromFile.java
2010-08-11 21:15 4340import java.io.*; import jav ... -
j2me竖向滚动菜单的基本做法
2010-08-11 16:58 2031public class AppCanvas extend ... -
j2me工具类:声音播放类SoundUtil
2010-06-04 23:21 2134用法: 将需要播放的音乐都罗列在name,type数组中,需要 ... -
j2me工具类:PalettedImage调色板类
2010-06-04 22:57 1807该方法网上可以找到,我添加了一个重载函数: public Im ... -
地图编辑器Mappy下载
2010-05-25 22:30 3330简单的手机游戏地图编辑器,共享之。。。 eclipseme下 ... -
将Image对像转换为png格式的byte数组
2010-04-15 12:48 2626原理上说 1 获取Image 的ARGB数据 2将ARGB ...
相关推荐
综上所述,在JDK 5中使用JSR105实现XML签名认证主要涉及到以下几个关键步骤:初始化`XMLSignatureFactory`、定义引用、读取并解析XML文档、构建签名信息以及生成私钥并创建签名。这些步骤确保了整个签名过程的安全性...
本篇文档《JDOM使用详解及实例(解析xml).pdf》将对JDOM的使用方法进行详细介绍,并提供实例来指导用户如何解析XML。 首先,JDOM提供了一种基于对象的XML表示方式。与DOM(文档对象模型)不同,JDOM不需要将XML文档...
#### 三、使用JDOM解析XML 为了更好地理解如何使用JDOM进行XML解析,我们可以通过一个简单的例子来展示这一过程: 1. **创建SAXBuilder实例:** 使用`new SAXBuilder()`创建一个新的`SAXBuilder`对象。 2. **加载...
**JSR 173 API**,全称为Java Specification Request 173,是Java社区进程(Java ...通过理解和使用JSR 173 API,开发者可以编写出更高效、内存占用更低的XML处理程序,这对于处理大数据量的XML应用场景至关重要。
它提供了解析XML文档并生成相应Java对象的能力,以及将Java对象转换为XML文档的功能。这个实现库通常与`jaxb-api.jar`一起使用,因为后者包含了JAXB的API定义,但不包含具体实现。 `jaxb-api.jar`则包含了JAXB的...
【标题】"jsr173_1.0_api.jar"是Java标准版的一个扩展,全称为Java Specification Request 173(JSR 173),它定义了Java编程语言对XML Streaming API(StAX - Streaming API for XML)的支持。这个API允许开发者以...
另一方面,基于迭代器的API使用XMLEventReader,它将XML解析为一系列的事件对象,每个对象封装了特定的XML结构信息。XMLEventReader实现了Java的迭代器接口,使得处理XML事件变得更加直观和模块化。与基于指针的API...
4. **org.jdom.input**: 包含用于构建XML文档的类,如SAXBuilder,用于从各种来源解析XML。 5. **org.jdom.output**: 包含将XML文档输出的各种类,如XMLOutputter,可以将XML文档写入文件或流。 ### 四、JDOM使用...
为了在这些设备上实现Web服务功能,Java Community Process (JCP) 定义了Java规范请求 172 (JSR 172),即Web服务API(WSA),它为J2ME提供了一套API,用于远程服务调用和XML解析。 **一、Web服务API的基础** JSR ...
通过使用`<context:component-scan>`标签配合特定的注解(如`@Component`、`@Service`等),可以完全避免XML配置的使用,从而让开发者能够更加专注于业务逻辑的实现。同时,Spring对JSR-250和JSR-330等标准的支持也...
- 接收方使用XMLSignatureFactory对象的unmarshalXMLSignature()方法解析XML签名。 - 调用XMLSignature.validate()方法验证签名。 10. 处理验证结果: - 如果验证成功,说明XML文件的完整性和来源可信;如果失败...
可能是Resolving XML Resolver的简称,它是一个用于解析XML文档时处理外部实体的工具。这个库可以帮助开发者处理XML文档中的引用,比如包含外部DTD(文档类型定义)或者XSLT样式表,使得XML解析更加灵活和可控。 3...
此外,Oracle 11g支持JSR 170,即Java内容存储仓库API,增强了XML与PL/SQL的交互能力。新引入的simple_integer数据类型提供了非空且更快的整数处理,而虚拟列(Virtual Columns)功能让用户可以基于业务需求动态定义...
2. **xml-apis.jar**: 这个JAR文件包含了Sun Microsystems(现为Oracle)提供的XML APIs,这些API遵循了JSR 74(Java API for XML Processing 1.0),使得Java开发者可以方便地在程序中处理XML文档。xml-apis.jar...
**使用JSR 311 API的优势:** - **简单易用**:JSR 311 API的注解驱动模型使得开发RESTful服务变得非常直观。 - **可扩展性**:通过服务提供者接口(SPI),可以轻松添加自定义的解析器、过滤器和异常处理器。 - **...
### JSR180与SIP格式消息封装:深度解析 #### 核心知识点:JSR180标准与SIP消息封装 **JSR180**(Java Specification Request 180)是Java Community Process(JCP)中的一项提议,主要关注于在Java 2 Micro ...
"java解析xml的4种方式的优缺点对比及实现详解" java解析xml的四种方式的优缺点对比及实现详解主要介绍了java解析xml的四种方式的优缺点对比及实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有...