SAX解析XML文件

1.XML文件介绍

XML中的节点和startElement,endElement之间的对应关系

2.SAX解析XML文件

public class SAXForHandler extends DefaultHandler {
	private String TAG = "SAXForHandler";
	private List<Person> list;

	@Override //在开始XML解析的时候调用
	public void startDocument() throws SAXException {
		list = new ArrayList<Person>();
	}

	private String pertag;
	private Person person;
	@Override //在开始解析某个结点的时候调用
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		if("person".equals(localName)){
			for(int i = 0; i < attributes.getLength(); ++i){
				person = new Person();
				person.setId(Integer.parseInt(attributes.getValue(i)));
			}
		}
		pertag = localName;
	}

	@Override //在获取结点中内容的时候调用
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		String data = new String(ch, start, length).trim();
		if("name".equals(pertag)){
			person.setName(data);
		}else if ("age".equals(pertag)) {
			person.setAge(new Short(data));
			Log.i(TAG, person.toString());//打印输出person的信息
		}
	}
	
	@Override //在完成解析某个结点的时候调用
	public void endElement(String uri, String localName, String qName) 
			throws SAXException {
		if("person".equals(localName)){
			list.add(person);
			person = null;
		}
		pertag = null;
	}

	@Override //在完成整个XML解析的时候调用
	public void endDocument() throws SAXException {
	}
}

调用如下代码就可以让SAX解析XML文件

	public void parseXMLWithSAX() throws Exception {
		InputStream inputStream = getClass().getClassLoader().
				getResourceAsStream("NewFile.xml");
		
		SAXForHandler saxForHandler = new SAXForHandler();
		
		SAXParserFactory factory = SAXParserFactory.newInstance();
		SAXParser saxParser = factory.newSAXParser();
		saxParser.parse(inputStream, saxForHandler);

		inputStream.close();
	}

解析结果如下;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏TheOneGIS空间站

LINQ初步

语言集查询(Language Integrated Query, LINQ)集成了C#编程语言中的查询语法,可以用同样的语法访问不同的数据源。LINQ提供了不同...

9420
来自专栏Web项目聚集地

Java SSM框架基础面试题

作用:Ioc解决对象之间的依赖问题,把所有Bean的依赖关系通过配置文件或注解关联起来,降低了耦合度。

24910
来自专栏Ryan Miao

Java XML解析工具 dom4j介绍及使用实例

  dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory

22620
来自专栏Python爬虫与数据挖掘

Windows下安装Scrapy方法及常见安装问题总结——Scrapy安装教程

这几天,很多朋友在群里问Scrapy安装的问题,其实问题方面都差不多,今天小编给大家整理一下Scrapy的安装教程,希望日后其他的小伙伴在安装的时候不再...

9030
来自专栏编程坑太多

「小程序JAVA实战」小程序搜索功能(55)

PS:搜索功能,后台提供url,直接赋值到插件就可以了,通过输入关键字点击搜索,将关键字保存标识传递,关键字传递给index页面,index获取后在根据关键字查...

25980
来自专栏TheOneGIS空间站

Dom4j解析带有命名空间的XML文件

    今天我在解析KML文件的过程中,使用XPath表达式,可是返回的结果总是null,纠结了很久,后来通过查资料,发现是我的KML中有命名空间的缘故。

17530
来自专栏TheOneGIS空间站

使用过滤器解决中文乱码问题

在Web.xml文件中,配置过滤器,其过滤器的URL映射可以使用正则表达式进行配置,如实例中使用“/*”来匹配所有请求。

34830
来自专栏TheOneGIS空间站

Log4J使用快速入门

Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有ERROR、WARN、 INFO、DEBU...

26740
来自专栏TheOneGIS空间站

Hibernate入门遇到的一些问题

使用Configuration config = new Configuration().configure();读取Hibernate的配置文件,文件的默认名...

11030
来自专栏张浩的专栏

Spark 设置 Hadoop 的配置文件

当我们在开发Spark应用程序的时候,没有设置Hadoop的配置文件的情况下来读取或者写入HDFS文件,每次都要写上hdfs://host:port/pa...

50510

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励