SAX解析
2016-06-27 11:44
211 查看
SAX解析是按照xml文件的顺序一步一步的来解析,人为的不可以控制进度,自动调用方法。
package com.example.parse; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; import com.example.bean.Books; public class SAXParse implements IParse { public List<Books> l; @Override public List<Books> parse(InputStream is) { l = new ArrayList<Books>(); try { //得到工厂对象 SAXParserFactory factory = SAXParserFactory.newInstance(); //得到解析器对象 SAXParser parser = factory.newSAXParser(); //从解析器中获得reader XMLReader xmlReader = parser.getXMLReader(); SAXHandler handler = new SAXHandler(); //得到内容管理者 xmlReader.setContentHandler(handler); //开始解析 xmlReader.parse(new InputSource(is)); //将解析到的对象返回 return handler.getList(); } catch (Exception e) { e.printStackTrace(); } return l; } static class SAXHandler extends DefaultHandler { private List<Books> l; private Books books; private String value; //文档开始 @Override public void startDocument() throws SAXException { // 开始解析时创建集合book l = new ArrayList<Books>(); } //结束文档 @Override public void endDocument() throws SAXException { } //开始标签 @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // 如果开始是book节点 if ("book".equalsIgnoreCase(qName)) { // 创建book 对象 books = new Books(); } } //结束标签 @Override public void endElement(String uri, String localName, String qName) throws SAXException { // 每个节点下的值添加到集合中 if ("name".equalsIgnoreCase(qName)) { books.setName(value); } else if ("author".equalsIgnoreCase(qName)) { books.setAuthor(value); } else if ("price".equalsIgnoreCase(qName)) { books.setPrice(value); } else if ("book".equalsIgnoreCase(qName)) { l.add(books); } } @Override public void characters(char[] ch, int start, int length) throws SAXException { // 获得每个属性节点下的值 value = new String(ch, start, length); System.out.println(value); } public List<Books> getList() { return l; } } }
相关文章推荐
- XML 与 JSON 优劣对比
- As3.0 xml + Loader应用代码
- 网马生成器 MS Internet Explorer XML Parsing Buffer Overflow Exploit (vista) 0day
- ext读取两种结构的xml的代码
- 实例解析Ruby程序中调用REXML来解析XML格式数据的用法
- Ruby中XML格式数据处理库REXML的使用方法指南
- C#中如何使用 XmlReader 读取XML文件
- C#针对xml基本操作及保存配置文件应用实例
- Ruby使用REXML库来解析xml格式数据的方法
- Ruby程序中创建和解析XML文件的方法
- Ruby的XML格式数据解析库Nokogiri的使用进阶
- asp下查询xml的实现代码
- sqlserver FOR XML PATH 语句的应用
- 使用sp_xml_preparedocument处理XML文档的方法
- EBS xml publisher中文乱码问题及解决办法
- C#中的Linq to Xml详解
- C#操作XML文件实例汇总
- C# XML序列化方法及常用特性总结分析
- SQL Server中的XML数据进行insert、update、delete