JAVA SAX解析XML文件

[代码] [Java]代码
view sourceprint?
001
package SAXparse;
002

003

004
import java.io.FileInputStream;
005
import java.lang.reflect.Array;
006
import java.lang.reflect.InvocationTargetException;
007
import java.lang.reflect.Method;
008
import java.text.ParseException;
009
import java.text.SimpleDateFormat;
010
import java.util.ArrayList;
011
import java.util.List;
012

013
import javax.sql.rowset.spi.XmlReader;
014
import javax.xml.parsers.ParserConfigurationException;
015
import javax.xml.parsers.SAXParser;
016
import javax.xml.parsers.SAXParserFactory;
017

018
import org.w3c.dom.Element;
019
import org.xml.sax.Attributes;
020
import org.xml.sax.InputSource;
021
import org.xml.sax.SAXException;
022
import org.xml.sax.XMLReader;
023
import org.xml.sax.helpers.DefaultHandler;
024

025

026

027
public class SaxParse {
028

029
public static void main(String[] args) throws Exception {
030
// TODO Auto-generated method stub
031
SAXParserFactory saxpf = SAXParserFactory.newInstance();
032
SAXParser saxp = saxpf.newSAXParser();
033
XMLReader reader = saxp.getXMLReader();
034
//这里不同于DOM解析式多了一个Handler 创建一个将要解析文件的Handler类继承 DefaultHandler
035
EmployeeHandler empHander = new EmployeeHandler();
036
reader.setContentHandler(empHander);
037
//set Handler
038
reader.parse(new InputSource(new FileInputStream("file/xml/employeelist.xml")));
039
//开始解析,SAX 开始解析的时候 就会自动调用 EmployeeHandler 中的方法 开始解析调用startDocument(),开始解析一个元素调用startElement()。
040
ArrayList<Employee> empList = empHander.getEmployeeList();
041
for(Employee emp:empList){
042
System.out.println(emp);
class EmployeeHandler extends DefaultHandler{
049
//EmployeeHandler 继承DefaultHandler 然后根据需要选择要重载的 方法
050http://www.huiyi8.com/moban/ 网页模板
// 这里我重载了 startDocument endDocument startElement endElement endElement characters
051
private ArrayList<Employee> employeeList = new ArrayList<Employee>();
052
//创建一个list 来保存解析出来的employee对象
053
@Override
054
public void startDocument() throws SAXException {
055
// TODO Auto-generated method stub
056
System.out.println("begin");
057
//开始解析 打印 begin
058
}
059

060
@Override
061
public void endDocument() throws SAXException {
062
// TODO Auto-generated method stub
063
System.out.println("end");
064
// 结束后打印end
065
}
066

067
private Employee emp =null;
068
private Class cls =null;
069
private String qName=null;
070
public void startElement(String uri, String localName, String qName,
071
Attributes attributes) throws SAXException {
072
// TODO Auto-generated method stub
073
this.qName =qName;
074
//在这里保存一下 元素的名称,在characters()有用到
075
try {
076
cls =Class.forName("SAXparse.Employee");
077
//反射机制
078
Method[] methods =cls.getMethods();
079
if(qName.equals("employee")||qName.equals("salary")){
080
//如果qName=employee 也就是解析到了 employee元素和salary 元素才继续
081
// 因为employee就是要建立的对象,每当解析到一个employee元素就创建一个employee对象
082
// salary 因为有属性所以也单独拿出来
083
if(emp==null){
084
//如果employee对象不存在 就创建
085
emp = (Employee) cls.newInstance();
086
System.out.println("创建一个emp对象");
087
}
088
for(Method me : methods){
089
String meName = me.getName();
090
if(meName.startsWith("set")){
091
String mName = meName.substring(3).toLowerCase();
092
Class[] parm = me.getParameterTypes();
093
String parma = parm[0].getName();
094

095
for(int i=0;i<attributes.getLength();i++){
096
String attrName = attributes.getQName(i);
097
//直接从函数参数中拿到attributes 这里也就是 SAX我感觉 比DOM 效率高的地方
098
//是顺序解析的。但是自由度就没有DOM解析高了
099
String attrVal = attributes.getValue(i);
100
if(mName.equals(attrName.toLowerCase())){
101
if(parma.equals("java.lang.String")){
102
//吧属性set进emp对象中
103
me.invoke(emp,attrVal );

JAVA SAX解析XML文件,布布扣,bubuko.com

时间: 2024-10-17 03:30:00

JAVA SAX解析XML文件的相关文章

SAX解析XML文件

SAX是Simple API for XML的缩写,它并不是由W3C官方所提出的标准.SAX是一种轻量型的方法,不像DOM解析时,把XML文档全部载入内存中,在PC上操作,Dom还有 优势,但在手机中端上则无优势,因为手机内存和硬件都比不上PC强.使用 SAX 是比较安全的,并且 Android 提供了一种传统的 SAX 使用方法,以及一个便捷的 SAX 包装器.SAX采用基于事件驱动的处理方式,它将XML文档转换成一系列的事件,由单独的事件处理器来决定如何处理. 在SAX接口中,事件源是org

SAX解析XML文件实例代码

import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.s

java DOM解析xml文件出现#text节点解决方案

java DOM解析xml文件出现#text节点解决方案 原生java解析xml的方法提供了两个,DocumentBuilder 和 SAXParser. 试了第一个DOM方法,在解析输出节点过程中,getNodeName()输出节点名发现多出了几个#text节点. text.xml <?xml version="1.0" encoding="UTF-8"?> <!-- xml解析测试文件 --> <LData> <ldat

Java Sax解析xml

1.   Java Sax解析是按照xml文件的顺序一步一步的来解析,在解析xml文件之前,我们要先了解xml文件的节点的种类,一种是ElementNode,一种是TextNode.如下面的这段book.xml Xml代码   <?xml version="1.0" encoding="UTF-8"?> <books> <book id="12"> <name>thinking in java<

java dom4j 解析XML文件 简易教程

XML 来自: W3School XML 被设计用来传输和存储数据. HTML 被设计用来显示数据. 什么是 XML? eXtensible Markup Language XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没有被预定义.您需要自行定义标签. XML 被设计为具有自我描述性. XML 是 W3C 的推荐标准 XML 与 HTML 的主要差异 XML 不

安卓SAX解析XML文件

XML文件常用的解析方式有DOM解析,SAX解析. 一.Sax SAX(simpleAPIforXML)是一种XML解析的替代方法.相比于DOM,SAX是一种速度更快,更有效的方法.它逐行扫描文档,一边扫描一边解析.而且相比于DOM,SAX可以在解析文档的任意时刻停止解析,但任何事物都有其相反的一面,对于SAX来说就是操作复杂.SAX解析XML文档采用事件驱动模式.什么是事件驱动模式?它将XML文档转换成一系列的事件,由单独的事件处理器来决定如何处理.基于事件驱动的处理模式主要是基于事件源和事件

Python—使用xml.sax解析xml文件

什么是sax? SAX是一种基于事件驱动的API. 利用SAX解析XML文档牵涉到两个部分:解析器和事件处理器. 解析器负责读取XML文档,并向事件处理器发送事件,如元素开始跟元素结束事件; 而事件处理器则负责对事件作出相应,对传递的XML数据进行处理. sax适于处理下面的问题: 1.对大型文件进行处理: 2.只需要文件的部分内容,或者只需从文件中得到特定信息: 3.想建立自己的对象模型的时候. 在python中使用sax方式处理xml要先引入xml.sax中的parse函数,还有xml.sa

cocos2d-x 3.0 使用Sax解析xml文件(中国显示器问题解决)

今天是个好日子.我以为事情可以变得,明天是个好日子.打开门儿春风... 恩,听着歌写文档生活就是这么享受. 今天曾经的邻居大神突然在qq上赞了我一下,这让我异常激动啊.. 这还要从前前前几天说起,那会无意间看到cocos微信上的一个实话实说活动.反正就是參加了能够抽奖这样子啦.没错.我就是本着那官方T恤去的,本着分子越大分母越大抽奖几率越大的原则,然后就连着发了一番感慨.并且还都是比較罗嗦,没想到隔天cocos君居然给我回复了,中奖了有木有,cocos2dx的官方T恤,哈哈. .然后就是曾经的大

使用SAX解析XML文件

1 <?xml version="1.0" encoding="UTF-8"?> 2 <Code> 3 <SytmBankCode code="1256" name="长虹基金" logonId="6228400210568" password="123456" fieldXmlFile="changhong//browser//TestField