`
sonyfe25cp
  • 浏览: 203842 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用SAX解析XML文件

阅读更多
为了帮助兽兽同学写一个XML的解析..专门复习了下怎么写SAX的解析.

首先,介绍下XML目前的两种写法.
第1种
<?xml version="1.0"?>
<user>
	<customer>
		<FirstName>Bob2</FirstName>
		<LastName>Hustead</LastName>
		<CustId>abc.123</CustId>
	</customer>
	<customer>
		<FirstName>Bob3</FirstName>
		<LastName>Hustead</LastName>
		<CustId>abc.123</CustId>
	</customer>
</user>

第2种
rbac.xml
<?xml version="1.0" encoding="UTF-8"?>
<rbac-definition>
	<organizations>
		<organization id="1" name="华迪" no="A0"
			innerno="8790-C9B2-7B08-46FD-A4F8-4157-AD25-5F7B" superiororg="0"
			virflag="0" status="0" />
		<organization id="2" name="业务部" no="A1"
			innerno="0EBE-1B07-BD59-425E-958E-2281-A473-9383" superiororg="1"
			virflag="0" status="0" />
		<organization id="3" name="软件中心" no="A2"
			innerno="D30C-FB7A-E7E-49CE-A3D2-695B-0A4A-CD5B" superiororg="1"
			virflag="0" status="0" />
	</organizations>
	<positions>
		<position id="1" name="用户" no="A1.1" owner="" />
		<position id="2" name="主管" no="A1.2" owner="" />
		<position id="3" name="经理" no="A1.3" owner="" />
		<position id="4" name="总工" no="A2.1" owner="" />
	</positions>

	<org-poses>
		<org-pos orgid="2" posid="1" />
		<org-pos orgid="2" posid="2" />
		<org-pos orgid="2" posid="3" />
		<org-pos orgid="3" posid="4" />
		<org-pos orgid="3" posid="5" />
	</org-poses>
</rbac-definition>

对于第一种的解析,google上铺天盖地的都是...偏偏兽兽同学要的是第2中的解析..当然也是大同小异..ok..他要求还挺多..还必须把每一个数据项都摘出来..以便进行后续开发使用.那好吧..开工!

第2步:针对第2中XML以及其中内容进行准备工作
1.建立org,pos,org_pos的类 便于操作
package parseXML;

public class Organization {

	public int id;
	public String name;
	public String no;
	public String innerno;
	public int superiororg;
	public int virflag;
	public int status;

	public String toString() {
		String str = "";
		str = "the org's id is " + id + ",name is " + name + " ,no is " + no
				+ " ,innerno" + innerno + " ,superiororg is " + superiororg
				+ " ,virflag is " + virflag + " ,status is " + status;
		return str;
	}
}

class Position {

	private int id;
	private String name;
	private String no;
	private String owner;

	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getNo() {
		return no;
	}
	public void setNo(String no) {
		this.no = no;
	}
	public String getOwner() {
		return owner;
	}
	public void setOwner(String owner) {
		this.owner = owner;
	}

}

class Org_pos {
	private int org_id;
	private int pos_id;

	public int getOrg_id() {
		return org_id;
	}
	public void setOrg_id(int org_id) {
		this.org_id = org_id;
	}
	public int getPos_id() {
		return pos_id;
	}
	public void setPos_id(int pos_id) {
		this.pos_id = pos_id;
	}

}

2.根据SAX原理,写出来handler,用于解析
ParseOrg.java
package parseXML;

import java.util.ArrayList;
import java.util.List;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class ParseOrg extends DefaultHandler {
	boolean hasAttribute = false;
	Attributes attributes = null;
	
	private List<Organization> orgList=new ArrayList<Organization>();
	private List<Position> posList=new ArrayList<Position>();
	private List<Org_pos> org_posList=new ArrayList<Org_pos>();
	
	
	public void startDocument() throws SAXException {
		System.out.println("~~begining~~");
	}
	public void endDocument() throws SAXException {
		System.out.println("~~end~~");
	}
	
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		if (qName.equals("organization")) {
			System.out.println("********************************");
			System.out.println("       Organization :");
			System.out.println("********************************");
			System.out.println(attributes.getQName(0) + " is : "
					+ attributes.getValue(0)+"\n"+attributes.getQName(1) + "is : "
					+ attributes.getValue(1)+"\n"+attributes.getQName(2) + "is : "
					+ attributes.getValue(2)+"\n"+attributes.getQName(3) + "is : "
					+ attributes.getValue(3)+"\n"+attributes.getQName(4) + "is : "
					+ attributes.getValue(4)+"\n"+attributes.getQName(5) + "is : "
					+ attributes.getValue(5)+"\n"+attributes.getQName(6) + "is : "
					+ attributes.getValue(6));
			Organization org=new Organization();
			org.id=Integer.parseInt( attributes.getValue(0));
			org.name=attributes.getValue(1);
			org.no=attributes.getValue(2);
			org.innerno=attributes.getValue(3);
			org.superiororg=Integer.parseInt( attributes.getValue(4));
			org.virflag=Integer.parseInt( attributes.getValue(5));
			org.status=Integer.parseInt( attributes.getValue(6));
//			System.out.println(org.toString());
			orgList.add(org);
			
		}
		if (attributes.getLength() > 0) {
			System.out.println(attributes.getLength()+"  :attributes length");
			this.attributes = attributes;
			this.hasAttribute = true;
		}
		if (qName.equals("position")) {
			System.out.println("********************************");
			System.out.println("         position :");
			System.out.println("********************************");
			System.out.println(attributes.getQName(0) + " is : "
					+ attributes.getValue(0)+"\n"+attributes.getQName(1) + "is : "
					+ attributes.getValue(1)+"\n"+attributes.getQName(2) + "is : "
					+ attributes.getValue(2)+"\n"+attributes.getQName(3) + "is : "
					+ attributes.getValue(3));
			Position pos=new Position();
			pos.setId(Integer.parseInt( attributes.getValue(0)));
			pos.setName(attributes.getValue(1));
			pos.setNo(( attributes.getValue(2)));
			pos.setOwner(attributes.getValue(3));
			posList.add(pos);
		}
		if (qName.equals("org-pos")) {
			System.out.println("********************************");
			System.out.println("         org-pose :");
			System.out.println("********************************");
			System.out.println(attributes.getQName(0) + " is : "
					+ attributes.getValue(0)+"\n"+attributes.getQName(1) + "is : "
					+ attributes.getValue(1));
			Org_pos org_pos=new Org_pos();
			org_pos.setOrg_id(Integer.parseInt(attributes.getValue(0)));
			org_pos.setPos_id(Integer.parseInt(attributes.getValue(1)));
			org_posList.add(org_pos);
			
		}
	}

	public void endElement(String uri, String localName, String qName)
			throws SAXException {
//		if (hasAttribute && (attributes != null)) {
//			for (int i = 0; i < attributes.getLength(); i++) {
//				System.out.println(attributes.getQName(0)
//						+ " and its value is : " + attributes.getValue(0));
//			}
//		}
	}

//	public void characters(char[] ch, int start, int length)
//			throws SAXException {
//		System.out.println((new String(ch, start, length))+"  :here");
//	}
	public List<Position> getPosList() {
		return posList;
	}
	public void setPosList(List<Position> posList) {
		this.posList = posList;
	}
	public List<Org_pos> getOrg_posList() {
		return org_posList;
	}
	public void setOrg_posList(List<Org_pos> org_posList) {
		this.org_posList = org_posList;
	}
	public List<Organization> getOrgList() {
		return orgList;
	}
	public void setOrgList(List<Organization> orgList) {
		this.orgList = orgList;
	}
}



最后,写出来程序入口即可
SaxParse.java
package parseXML;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
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.sax.SAXException;

public class SaxParse {

	/**
	 * 采用SAX解析
	 */
	public SaxParse() {
		SAXParserFactory saxfac = SAXParserFactory.newInstance();
		try {
			SAXParser saxparser = saxfac.newSAXParser();
			InputStream is = new FileInputStream(
					"C:\\workspace\\Lab\\src\\parseXML\\rbac.xml");
			ParseOrg parseOrg=new ParseOrg();
			saxparser.parse(is, parseOrg);//重点
			
			/**
			 * 全部存到list里了
			 */
			List<Organization> orgList=new ArrayList<Organization>();
			orgList=parseOrg.getOrgList();
			for(int i=0;i<orgList.size();i++){
				System.out.println(orgList.get(i)+" : orglist");
			}
			
			/**
			 * 全部存到list里了
			 */
			List<Position> posList=new ArrayList<Position>();
			posList=parseOrg.getPosList();
			for(int i=0;i<posList.size();i++){
				System.out.println(posList.get(i)+" : posList");
			}
			
			/**
			 * 全部存到list里了
			 */
			List<Org_pos> org_posList=new ArrayList<Org_pos>();
			org_posList=parseOrg.getOrg_posList();
			for(int i=0;i<org_posList.size();i++){
				System.out.println(org_posList.get(i)+" : org_posList");
			}
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		new SaxParse();
	}

}



总结:功能已经实现...输出也很漂亮...当然只针对Organization进行了处理..剩下两个的输出样式不再啰嗦了..

输出结果:
********************************
       Organization :
********************************
id is : 1
nameis : 华迪
nois : A0
innernois : 8790-C9B2-7B08-46FD-A4F8-4157-AD25-5F7B
superiororgis : 0
virflagis : 0
statusis : 0
7  :attributes length
......
********************************
         position :
********************************
id is : 1
nameis : 用户
nois : A1.1
owneris : 
4  :attributes length
.....
********************************
         org-pose :
********************************
orgid is : 2
posidis : 1
2  :attributes length

上述结果省略了很多...
具体效果还是执行一下程序,从控制台观看吧...
分享到:
评论

相关推荐

    SAX解析XML文件实例

    一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml文件的实例

    Sax解析xml文件

    以下是一个使用SAX解析XML文件的基本步骤: 1. **创建解析器**: 首先,我们需要创建一个SAX解析器实例。在Java中,这通常通过`SAXParserFactory`类完成。设置解析器属性,然后调用`newSAXParser()`方法获取`...

    [Android]使用SAX解析XML文件

    以下是使用SAX解析XML文件的步骤: 1. 引入依赖:在Android项目中,通常需要添加`xmlpull`库,它包含了SAX解析器。可以在`build.gradle`文件中添加依赖: ``` implementation 'xpp3:xpp3:1.1.4c' ``` 2. 创建...

    使用SAX解析xml文件

    使用SAX解析XML文件的基本步骤如下: 1. **导入库**:首先需要导入`org.xml.sax`包下的相关类,如`SAXParserFactory`,`SAXParser`和`DefaultHandler`。 2. **创建解析工厂**:使用`SAXParserFactory.newInstance()`...

    Sax解析XML文件解析

    **SAX解析XML的基本原理:** SAX解析器以流式的方式读取XML文档,当遇到文档的各个元素时,会触发相应的事件,如开始文档、开始元素、结束元素、字符数据等。程序员通过实现SAX解析器的回调接口来处理这些事件,从而...

    sax解析xml文件

    总结来说,"saxloadxml"项目提供了使用SAX解析XML文件的一个实例,可以帮助开发者了解如何利用SAX解析器处理XML文档,尤其是在性能和内存使用方面有较高要求的情况下。通过学习和实践这个项目,你可以提升处理XML...

    使用SAX解析XML文件个人总结

    ### 使用SAX解析XML文件详解 #### 一、XML与SAX简介 XML(Extensible Markup Language,可扩展标记语言)是一种用于标记电子文件使其具有结构性的标记语言,旨在克服HTML的一些不足,使得数据能够被不同系统间共享...

    android 使用Sax解析XML 源码实例

    下面是一个SAX解析XML的示例(有点长,因为详细注解了SAX事件处理的所有方法),SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler 。下面的例子可能...

    Java SAX解析Xml文档Demo

    本示例将详细解释如何在Java中使用SAX解析XML文档,并通过注释进行详细说明。 首先,我们需要引入SAX解析器的依赖库,通常这可以通过在项目构建配置中添加JAXB或Xerces实现来实现。 ```java // 引入必要的库,如...

    SDcard数据访问SAX解析XML文件

    要使用SAX解析XML文件,我们需要遵循以下步骤: 1. **创建解析器**: 首先,我们需要创建一个SAX解析器。Android提供了一个内置的`DefaultHandler`类,我们可以继承它并重写其中的方法来处理解析过程中遇到的事件。 ...

    Android中使用sax解析xml文件的方法

    首先,让我们了解一下SAX解析XML的基本流程。当SAX解析器读取XML文件时,它会按照文档顺序触发一系列事件,这些事件对应于ContentHandler接口中定义的方法。以下是ContentHandler接口的一些关键方法: 1. `start...

    SAX解析xml文件源码

    下面将详细介绍SAX解析XML文件的基本原理、工作流程以及在Android环境下如何实现。 **SAX解析的基本原理:** SAX解析器在读取XML文档时会触发一系列的事件,如开始文档、结束文档、开始元素、结束元素、字符数据等...

    Servlet利用SAX解析XML文档

    以下是使用Servlet和SAX解析XML的基本步骤: 1. **创建Servlet**:首先,你需要创建一个Servlet类,继承HttpServlet,并重写doGet或doPost方法,因为XML解析通常发生在HTTP请求处理中。 2. **添加SAX解析器依赖**...

    SAX解析超大XML文件 示例代码

    最后,使用`saxParser.parse()`方法解析XML文件并传递我们的处理器。 在实际应用中,根据需求,你可能需要在处理器方法内进行更复杂的数据处理,例如存储数据、计算或验证。SAX解析器允许你在不消耗大量内存的情况...

    android使用SAX解析xml

    - `xmlSAXPaserDemo`可能是一个包含示例代码的Android项目,用于演示如何实际使用SAX解析XML文件。 - 项目中可能包括网络请求模块、SAX解析器处理类以及展示解析结果的UI部分。 通过以上步骤,开发者可以在...

    SAX解析XML文件以及排序

    结合上述信息,我们可以创建一个示例程序,使用SAX解析XML文件,并对从中提取的id进行冒泡排序: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers....

    sax解析xml本地读取xml

    以下是一个简单的SAX解析XML文件的Java代码示例: ```java import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler;...

    sax解析xml尤其是获取元素的值或者内容

    Java中,可以使用`SAXParserFactory`来生成`SAXParser`,然后调用`parse()`方法解析XML文件。例如: ```java SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory....

Global site tag (gtag.js) - Google Analytics