加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml解析

发布时间:2020-12-16 00:38:00 所属栏目:百科 来源:网络整理
导读:今天是2013年7月31日,从今天下午开始,我就要进行为期四个月的安卓学习了。 今天我们学习了java的sax解析,sax解析是由五种事件组成。 解析方式:Set 解析, Dom 解析, Arraylist 集合,与数组的区别: Sax 解析的目的:抽象对象的概念,将赋值后的对象放

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

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

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

Arraylist集合,与数组的区别:

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

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

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

元素开始事件:<person>

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

元素结束事件:</person>

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

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

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

1.SAX(SimpleAPIforXML):一行一行的读,触发事件。(这个XML文档没有加载到内存中)
2.DOM(DocumentObjectModel):将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 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);
	}
	

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读