XML学习总结-SAX解析-(三)
来源:互联网 发布:nginx 1.10.2 编辑:程序博客网 时间:2024/04/18 11:55
SAX解析原理
加载一点,读取一点,处理一点,对内存要求比较低;
SAX解析工具
sun公司提供,内置在jdk中.
org.xml.sax.*;包下
核心API
核心的API:
SAXParser类: 用于读取和解析xml文件对象
parse(File f,
DefaultHandler dh
)方法: 解析xml文件
参数一: File:表示 读取的xml文件。
参数二: DefaultHandler: SAX事件处理程序。使用DefaultHandler的
DefaultHandler类的API:
void startDocument() : 在读到文档开始时调用
void endDocument() :在读到文档结束时调用
void startElement(String uri, String localName, String qName, Attributes attributes) :读到开始标签时调用
void endElement(String uri, String localName, String qName) :读到结束标签时调用
void characters(char[] ch, int start, int length) : 读到文本内容时调用
解析的实例demo
<?xml version="1.0" encoding="utf-8"?><contactList><contact id="001" name="eric"><name>张三</name><age>20</age><phone>134222223333</phone><email>zhangsan@qq.com</email><qq>432221111</qq></contact><contact id="002" name="jacky"><name>李四</name><age>20</age><phone>134222225555</phone><email>lisi@qq.com</email><qq>432222222</qq></contact></contactList>
package gz.itcast.c_sax;public class Contact {private String id;private String name;private String age;private String phone;private String email;private String qq;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getQq() {return qq;}public void setQq(String qq) {this.qq = qq;}@Overridepublic String toString() {return "Contact [age=" + age + ", email=" + email + ", id=" + id+ ", name=" + name + ", phone=" + phone + ", qq=" + qq + "]";}}
DEMO1
package gz.itcast.c_sax;import java.io.File;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;/** * 第一个SAX读取xml文件程序 * @author APPle * */public class Demo1 {public static void main(String[] args) throws Exception{//1.创建SAXParser对象SAXParser parser = SAXParserFactory.newInstance().newSAXParser();//2.调用parse方法/** * 参数一: xml文档 * 参数二: DefaultHandler的子类 */parser.parse(new File("./src/contact.xml"), new MyDefaultHandler());}}
package gz.itcast.c_sax;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;/** * SAX处理程序(如何解析xml文档) * @author APPle * */public class MyDefaultHandler extends DefaultHandler {/** * 开始文档时调用 */@Overridepublic void startDocument() throws SAXException {System.out.println("MyDefaultHandler.startDocument()");}/** * 开始标签时调用 * @param qName: 表示开始标签的标签名 * @param attributes: 表示开始标签内包含的属性列表 */@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {System.out.println("MyDefaultHandler.startElement()-->"+qName);}/** * 结束标签时调用 * @param qName: 结束标签的标签名称 */@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {System.out.println("MyDefaultHandler.endElement()-->"+qName);}/** * 读到文本内容的时调用 * @param ch: 表示当前读完的所有文本内容 * @param start: 表示当前文本内容的开始位置 * @param length: 表示当前文本内容的长度 * char[]( 张三 20) 100 * 98 2 */ @Overridepublic void characters(char[] ch, int start, int length)throws SAXException {//得到当前文本内容String content = new String(ch,start,length);System.out.println("MyDefaultHandler.characters()-->"+content);}/** * 结束文档时调用 */@Overridepublic void endDocument() throws SAXException {System.out.println("MyDefaultHandler.endDocument()");}}
DEMO2
package gz.itcast.c_sax;import java.io.File;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;/** * 读取contact.xml文件,完整输出文档内容 * @author APPle * */public class Demo2 {public static void main(String[] args)throws Exception {//1.创建SAXParserSAXParser parser = SAXParserFactory.newInstance().newSAXParser();//2.读取xml文件MyDefaultHandler2 handler = new MyDefaultHandler2();parser.parse(new File("./src/contact.xml"), handler);String content = handler.getContent();System.out.println(content);}}
package gz.itcast.c_sax;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;/** * SAX处理器程序 * @author APPle */public class MyDefaultHandler2 extends DefaultHandler {//存储xml文档信息private StringBuffer sb = new StringBuffer();//获取xml信息public String getContent(){return sb.toString();}/** * 开始标签 */@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {sb.append("<"+qName);//判断是否有属性if(attributes!=null){for(int i=0;i<attributes.getLength();i++){//得到属性名称String attrName = attributes.getQName(i);//得到属性值String attrValue = attributes.getValue(i);sb.append(" "+attrName+"=\""+attrValue+"\"");}}sb.append(">");}/** * 文本内容 */@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {//得到当前读取的文本String content = new String(ch,start,length);sb.append(content);}/** * 结束标签 */@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {sb.append("</"+qName+">");}}
DEMO3
package gz.itcast.c_sax;import java.io.File;import java.util.List;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;/** * 使用sax解析把 xml文档封装成对象 * @author APPle * */public class Demo3 {public static void main(String[] args)throws Exception {SAXParser parser = SAXParserFactory.newInstance().newSAXParser();MyDefaultHandler3 handler = new MyDefaultHandler3();parser.parse(new File("./src/contact.xml"), handler);List<Contact> list = handler.getList();for (Contact contact : list) {System.out.println(contact);}}}
package gz.itcast.c_sax;import java.util.ArrayList;import java.util.List;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;/** * SAX处理程序 * @author APPle * */public class MyDefaultHandler3 extends DefaultHandler {//存储所有联系人对象private List<Contact> list = new ArrayList<Contact>();public List<Contact> getList(){return list;}//保存一个联系人信息private Contact contact;/** * 思路: * 1)创建Contact对象 * 2)把每个contact标签内容存入到Contact对象 * 3)把Contact对象放入List中 *///用于临时存储当前读到的标签名private String curTag;@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {curTag = qName;//读取到contact的开始标签创建Contact对象if("contact".equals(qName)){contact = new Contact();//设置id值contact.setId(attributes.getValue("id"));}}@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {//当前文本内容String content = new String(ch,start,length);if("name".equals(curTag)){contact.setName(content);}if("age".equals(curTag)){contact.setAge(content);}if("phone".equals(curTag)){contact.setPhone(content);}if("email".equals(curTag)){contact.setEmail(content);}if("qq".equals(curTag)){contact.setQq(content);}}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {//设置空时为了避免空格换行设置到对象的属性中curTag = null;//读到contact的结束标签放入List中if("contact".equals(qName)){list.add(contact);}}}
0 0
- XML学习总结-SAX解析-(三)
- XML(三)Sax解析XML
- XML学习《SAX解析》
- 学习sax解析xml
- SAX解析XML:学习
- android解析XML总结-SAX、Pull、Dom三种方式
- XML解析总结(SAX、Pull、Dom三种方式)
- 解析XML总结(SAX、Pull、Dom三种方式)
- sax解析xml文件(三)
- SAX解析学习总结
- 关于xml学习(三)—— JAXP-SAX解析
- XML学习总结-DOM和SAX解析-综合案例-(四)
- Android学习-Sax解析XML
- XML---android解析XML总结(SAX、Pull、Dom三种方式)
- XML学习之SAX解析XML文件
- XML解析-DOM和SAX(三)
- sax解析xml文件过程总结
- SAX PULL DOCUMENT解析XML总结
- SSH项目实战-员工信息管理
- debug的基本操作
- XML学习总结-xml概念和dom4j解析技术-(一)
- XML学习总结-XPATH技术-(二)
- 【Ubuntu之旅】(二)——第二站:聊聊VIM
- XML学习总结-SAX解析-(三)
- XML学习总结-DOM和SAX解析-综合案例-(四)
- Mysql 用户登录无权限
- Javascript学习总结-基本语法-(一)
- 继承与初始化
- Javascript学习总结-基本语法-(二)
- Javascript学习总结-基本语法-(三)
- Javascript学习总结-函数-(四)
- Javascript学习总结-面向对象-(五)