xml解析

今天是2013年7月31日,从今天下午开始,我就要进行为期四个月的安卓学习了。

今天我们学习了java的sax解析,sax解析是由五种事件组成。

解析方式:Set解析,Dom解析,

Arraylist集合,与数组的区别:

Sax解析的目的:抽象对象的概念,将赋值后的对象放入集合中,为对象赋值。

Sax解析是以事件为机制的,将xml文件分为五种事件:

文档开始事件:<?xml version”1.0” encoding=”utf-8”?>,初始化操作

元素开始事件:<person>

字符数据事件:属性的值,

元素结束事件:</person>

文档结束事件:读到最后,没有内容了。

解析需要解析器,解析器由工厂来提供。

Url:命名空间,LocalnameQname:当前元素节点,attributeL属性

1.SAX (Simple API for XML):一行一行的读,触发事件。(这个XML文档没有加载到内存中)
2.DOM (Document Object Model):将XML文档全部读到内存中,形成一个DOM树,
     如果我要去获得该XML文档的某个属性数据的话,直接找到节点,从而获得值。 

person.java文件:

package com.sax;

public class Person {
	private int id;
	private int age;
	private String name;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

person.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persons>
	<person id="1">
		<name>王宏雷</name>
		<age>21</age>
	</person>
	<person id="2">
		<name>haha</name>
		<age>22</age>
	</person>
</persons>

SaxParserTest.java

package com.sax;

import java.io.IOException;
import java.util.ArrayList;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;

public class SaxParserTest {
	public static void main(String[] args) {
	
		try {
			SAXParserFactory factory =SAXParserFactory.newInstance();
			SAXParser parser=factory.newSAXParser();
			//创建回调解析器的接口
			XMLReader reader=parser.getXMLReader();
			//创建解析机制
			SaxDefaultHandler handler=new SaxDefaultHandler();
			//将事件机制放入接口中
			reader.setContentHandler(handler);
			//找到xml文件并解析
			reader.parse("src/com/sax/Person.xml");
			ArrayList<Person> list= handler.getList();
			for(Person person :list){
				System.out.println("id="+person.getId()+"");
				System.out.println("age="+person.getAge()+"");
				System.out.println("name="+person.getName()+"");
			}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
		} catch (ParserConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}

SaxDefaultHandler.java

package com.sax;

import java.util.ArrayList;

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

public class SaxDefaultHandler extends DefaultHandler{
	private Person p;
	private String data;
	private ArrayList<Person> list;

	public ArrayList<Person> getList() {
		return list;
	}

	public void setList(ArrayList<Person> list) {
		this.list = list;
	}

	@Override
	//文档开始事件
	public void startDocument() throws SAXException {
		// 初始化操作
		list=new ArrayList<Person>();
	}

	@Override
	public void endDocument() throws SAXException {}

	@Override
	//元素开始事件
	/*url:命名空间
	 * localname:本地文件
	 * qname:当前的元素名称
	 * attribute:当前元素节点的属性集合
	*/
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		if("person".equals(qName)){
		    p=new Person();
			String idName=attributes.getValue(0);
			p.setId(Integer.parseInt(idName));
		}
	}

	@Override
	//元素结束事件
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		//为对象赋值,将对象放入list中
		if("name".equals(qName)){
			p.setName(data);
		}else if("age".equals(qName)){
			p.setAge(Integer.parseInt(data));
		}else if("person".equals(qName)){
			list.add(p);
		}
	}

	@Override
	//字符数据事件
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		//取文本节点的值
		data=new String(ch,start,length);
	}
	

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值