SAX解析XML文档
来源:互联网 发布:kali linux双系统安装 编辑:程序博客网 时间:2024/05/19 08:40
1.在使用 DOM 解析 XML 文档时,需要读取整个 XML 文档,在内存中构架代表整个 DOM 树的Doucment对象,从而再对XML文档进行操作。
此种情况下,如果 XML 文档特别大,就会消耗计算机的大量内存,并且容易导致内存溢出。
2.SAX解析允许在读取文档的时候,即对文档进行处理,而不必等到整个文档装载完才会文档进行操作。
3.SAX采用事件处理的方式解析XML文件,利用 SAX 解析 XML 文档,涉及两个部分:解析器和事件处理器
此种情况下,如果 XML 文档特别大,就会消耗计算机的大量内存,并且容易导致内存溢出。
2.SAX解析允许在读取文档的时候,即对文档进行处理,而不必等到整个文档装载完才会文档进行操作。
3.SAX采用事件处理的方式解析XML文件,利用 SAX 解析 XML 文档,涉及两个部分:解析器和事件处理器
4.SAX方式解析XML文档
1)使用SAXParserFactory创建SAX解析工厂
SAXParserFactory spf = SAXParserFactory.newInstance();
2)通过SAX解析工厂得到解析器对象
SAXParser sp = spf.newSAXParser();
3)通过解析器对象得到一个XML的读取器
XMLReader xmlReader = sp.getXMLReader();
4)设置读取器的事件处理器
xmlReader.setContentHandler(new BookParserHandler());
5)解析xml文件
xmlReader.parse("book.xml");
eg:
<?xml version="1.0" encoding="UTF-8"?><书架> <书> <书名 name="aaa">java</书名> <作者>小明</作者> <售价>39元</售价> </书> <书> <书名>JavaWeb</书名> <作者>zhangsan</作者> <售价>89元</售价> </书> </书架>
package cn.lsl.sax;import java.io.IOException;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.XMLReader;import org.xml.sax.helpers.DefaultHandler;public class Demo {public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {//1.创建生产解析器的工厂SAXParserFactory factory = SAXParserFactory.newInstance();//2.创建解析器SAXParser parser = factory.newSAXParser();//3.得到xml文档读写器XMLReader reader = parser.getXMLReader();//4.为读写器设置内容处理器reader.setContentHandler(new BookNameHandler());//利用读写器解析xml文档reader.parse("src/book.xml");}}//获取整个xml文档内容的处理器class ListHandler extends DefaultHandler{@Overridepublic void startElement(String uri, String localName, String name,Attributes attributes) throws SAXException {System.out.println("<"+name+">");}@Overridepublic void endElement(String uri, String localName, String name)throws SAXException {System.out.println("</"+name+">");}@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {System.out.println(new String(ch,start,length));}}//获取书名和属性class BookNameHandler extends DefaultHandler{private String currentTag;private int count; //记住当前解析到了几个书名书签, 用来控制等下要获得第几本书的书名@Overridepublic void startElement(String uri, String localName, String name,Attributes attributes) throws SAXException {currentTag = name;if("书名".equals(currentTag)){count++;}//得到标签所有属性for(int i=0;attributes!=null && i<attributes.getLength(); i++){String attName = attributes.getQName(i);String attValue = attributes.getValue(i);System.out.println(attName + "=" + attValue);}}@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {if("书名".equals(currentTag)&&count==1){System.out.println(new String(ch,start,length));}}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {// TODO Auto-generated method stubsuper.endElement(uri, localName, qName);}}5.读取xml文档内容,并封装到Bean中
package cn.lsl.sax;import java.io.IOException;import java.util.ArrayList;import java.util.List;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.XMLReader;import org.xml.sax.helpers.DefaultHandler;import cn.lsl.domain.Book;public class Demo1 {public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {SAXParserFactory factory = SAXParserFactory.newInstance();SAXParser parser = factory.newSAXParser();XMLReader reader = parser.getXMLReader();BeanListHandler handler = new BeanListHandler();reader.setContentHandler(handler);reader.parse("src/book.xml");System.out.println(handler.getBooks().size());}}class BeanListHandler extends DefaultHandler{private List list = new ArrayList();private Book book;private String currentTag;public List getBooks(){return list;}@Overridepublic void startElement(String uri, String localName, String name,Attributes attributes) throws SAXException {currentTag = name;if(name.equals("书")){book = new Book();}}@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {if(currentTag!=null && currentTag.equals("书名")){book.setBookname(new String(ch,start,length));}if(currentTag!=null && currentTag.equals("作者")){book.setBookname(new String(ch,start,length));}if(currentTag!=null && currentTag.equals("售价")){book.setBookname(new String(ch,start,length));}}@Overridepublic void endElement(String uri, String localName, String name)throws SAXException {if(name.equals("书")){list.add(book);}currentTag = null;}}
- SAX解析XML文档
- SAX解析xml文档
- SAX解析XML文档
- SAX解析xml文档
- SAX解析xml文档
- SAX解析XML文档
- SAX解析XML文档
- SAX解析XML文档
- SAX解析XML文档
- SAX解析XML文档
- sax解析xml文档
- SAX解析XML文档
- Sax解析Xml文档
- Sax解析XML文档
- SAX解析XML文档
- SAX解析xml文档
- SAX解析XML文档
- SAX解析xml文档
- IOS 开发必备网址
- 选择排序
- 负数的除法和右移的区别
- Delphi for iOS开发指南(8):在iOS应用程序中使用Tab组件来显示分页
- XML文件解析(SAX方式)
- SAX解析XML文档
- shell 中数学计算
- Mule ESB Studio v3.3使用安装以及详细案列
- 一款免费的.NET智能持续测试运行工具——Mighty-Moose
- sharepoint 2010 关于程序集生成失败,引用的程序集没有强名称的解决办法
- Java API 解析XML文件
- C++重载类型转换操作符
- FRM-30425: Summarized database item must reside in a block with Query All Records or Precompute Summ
- Ubuntu下支持RAR和7Z文件解压缩