xml解析
今天是2013年7月31日,从今天下午开始,我就要进行为期四个月的安卓学习了。 今天我们学习了java的sax解析,sax解析是由五种事件组成。 解析方式:Set解析,Dom解析, Arraylist集合,与数组的区别: Sax解析的目的:抽象对象的概念,将赋值后的对象放入集合中,为对象赋值。 Sax解析是以事件为机制的,将xml文件分为五种事件: 文档开始事件:<?xmlversion”1.0”encoding=”utf-8”?>,初始化操作 元素开始事件:<person> 字符数据事件:属性的值, 元素结束事件:</person> 文档结束事件:读到最后,没有内容了。 解析需要解析器,解析器由工厂来提供。 Url:命名空间,Localname:Qname:当前元素节点,attributeL属性 1.SAX(SimpleAPIforXML):一行一行的读,触发事件。(这个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); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |