xml解析

来源:互联网 发布:win7仿mac os桌面 编辑:程序博客网 时间:2024/06/06 20:59

今天是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 blocke.printStackTrace();} catch (ParserConfigurationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SAXException e) {// TODO Auto-generated catch blocke.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>();}@Overridepublic 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);}}





原创粉丝点击