`

使用jsr172解析xml

    博客分类:
  • j2me
阅读更多
基类:
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);
分享到:
评论

相关推荐

    在jdk5中使用JSR105实现XML签名认证的解决方案

    综上所述,在JDK 5中使用JSR105实现XML签名认证主要涉及到以下几个关键步骤:初始化`XMLSignatureFactory`、定义引用、读取并解析XML文档、构建签名信息以及生成私钥并创建签名。这些步骤确保了整个签名过程的安全性...

    JDOM使用详解及实例(解析xml).pdf

    本篇文档《JDOM使用详解及实例(解析xml).pdf》将对JDOM的使用方法进行详细介绍,并提供实例来指导用户如何解析XML。 首先,JDOM提供了一种基于对象的XML表示方式。与DOM(文档对象模型)不同,JDOM不需要将XML文档...

    JDOM解析XML文档

    #### 三、使用JDOM解析XML 为了更好地理解如何使用JDOM进行XML解析,我们可以通过一个简单的例子来展示这一过程: 1. **创建SAXBuilder实例:** 使用`new SAXBuilder()`创建一个新的`SAXBuilder`对象。 2. **加载...

    jsr173_api

    **JSR 173 API**,全称为Java Specification Request 173,是Java社区进程(Java ...通过理解和使用JSR 173 API,开发者可以编写出更高效、内存占用更低的XML处理程序,这对于处理大数据量的XML应用场景至关重要。

    jaxb-impl.jar jaxb-api.jar jsr173_1.0_api.jar

    它提供了解析XML文档并生成相应Java对象的能力,以及将Java对象转换为XML文档的功能。这个实现库通常与`jaxb-api.jar`一起使用,因为后者包含了JAXB的API定义,但不包含具体实现。 `jaxb-api.jar`则包含了JAXB的...

    jsr173_1.0_api.jar

    【标题】"jsr173_1.0_api.jar"是Java标准版的一个扩展,全称为Java Specification Request 173(JSR 173),它定义了Java编程语言对XML Streaming API(StAX - Streaming API for XML)的支持。这个API允许开发者以...

    java使用stax技术操作XML文档.doc

    另一方面,基于迭代器的API使用XMLEventReader,它将XML解析为一系列的事件对象,每个对象封装了特定的XML结构信息。XMLEventReader实现了Java的迭代器接口,使得处理XML事件变得更加直观和模块化。与基于指针的API...

    JDOM使用详解XML及实例

    4. **org.jdom.input**: 包含用于构建XML文档的类,如SAXBuilder,用于从各种来源解析XML。 5. **org.jdom.output**: 包含将XML文档输出的各种类,如XMLOutputter,可以将XML文档写入文件或流。 ### 四、JDOM使用...

    解析用于J2ME开发平台的Web服务API 解析用于J2ME开发平台的Web服务API

    为了在这些设备上实现Web服务功能,Java Community Process (JCP) 定义了Java规范请求 172 (JSR 172),即Web服务API(WSA),它为J2ME提供了一套API,用于远程服务调用和XML解析。 **一、Web服务API的基础** JSR ...

    spring3零配置注解实现Bean定义(包括JSR-250、JSR-330)

    通过使用`&lt;context:component-scan&gt;`标签配合特定的注解(如`@Component`、`@Service`等),可以完全避免XML配置的使用,从而让开发者能够更加专注于业务逻辑的实现。同时,Spring对JSR-250和JSR-330等标准的支持也...

    用Java数字签名提供XML安全.doc

    - 接收方使用XMLSignatureFactory对象的unmarshalXMLSignature()方法解析XML签名。 - 调用XMLSignature.validate()方法验证签名。 10. 处理验证结果: - 如果验证成功,说明XML文件的完整性和来源可信;如果失败...

    jsr173_1.0_api.jar rasolver.jar xbean.jar xbean_xpath.jar xmlbeans-qname.jar

    可能是Resolving XML Resolver的简称,它是一个用于解析XML文档时处理外部实体的工具。这个库可以帮助开发者处理XML文档中的引用,比如包含外部DTD(文档类型定义)或者XSLT样式表,使得XML解析更加灵活和可控。 3...

    Oracle 11g全新特性完全解析XML成为热点

    此外,Oracle 11g支持JSR 170,即Java内容存储仓库API,增强了XML与PL/SQL的交互能力。新引入的simple_integer数据类型提供了非空且更快的整数处理,而虚拟列(Virtual Columns)功能让用户可以基于业务需求动态定义...

    xml-apis.jar.zip

    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...

    jsr311-api.jar

    **使用JSR 311 API的优势:** - **简单易用**:JSR 311 API的注解驱动模型使得开发RESTful服务变得非常直观。 - **可扩展性**:通过服务提供者接口(SPI),可以轻松添加自定义的解析器、过滤器和异常处理器。 - **...

    jsr180 sip格式消息封装

    ### JSR180与SIP格式消息封装:深度解析 #### 核心知识点:JSR180标准与SIP消息封装 **JSR180**(Java Specification Request 180)是Java Community Process(JCP)中的一项提议,主要关注于在Java 2 Micro ...

    java解析xml的4种方式的优缺点对比及实现详解

    "java解析xml的4种方式的优缺点对比及实现详解" java解析xml的四种方式的优缺点对比及实现详解主要介绍了java解析xml的四种方式的优缺点对比及实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有...

Global site tag (gtag.js) - Google Analytics