xml Sax解析器
2016-06-17 11:40
176 查看
步骤:
1.创建事件处理程序(继承DefaultHandler),里面需要改写5个事件处理的方法
2.创建SaxParser解析器
3.将第一步创建的事件处理分配给第二步创建的parser
4.文档解析
现在来详细解说一下如何实现xml Sax解析
1.首先在在项目中创建一个xml文档
2.在创建一个Book类
3.创建解析器类所要实现的一个接口
4.创建事件处理器(注意:需要继承DefaultHandler,并且要重写里面的五个事件)
5.创建xml解析工作的一个类
1.创建事件处理程序(继承DefaultHandler),里面需要改写5个事件处理的方法
2.创建SaxParser解析器
3.将第一步创建的事件处理分配给第二步创建的parser
4.文档解析
现在来详细解说一下如何实现xml Sax解析
1.首先在在项目中创建一个xml文档
2.在创建一个Book类
package test.java.com; public class Book {//从xml中解析出来的内容以一本书的对象的形式存在 private String bookNo; private String title; private String author; public String getBookNo() { return bookNo; } public void setBookNo(String bookNo) { this.bookNo = bookNo; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public Book(String bookNo, String title, String author) { super(); this.bookNo = bookNo; this.title = title; this.author = author; } public Book() { super(); // TODO Auto-generated constructor stub } @Override public String toString() { // TODO Auto-generated method stub return "书号:"+bookNo+"\n书名:"+title+"\n作者:"+author; } }
3.创建解析器类所要实现的一个接口
package test.java.com; import java.util.ArrayList; public interface xmlParse {//创建解析器类所要实现的接口 解析xml文档的一个过程 public ArrayList<Book> parsexml(String fileName);//String fileName为路径名 }
4.创建事件处理器(注意:需要继承DefaultHandler,并且要重写里面的五个事件)
package test.java.com; import java.util.ArrayList; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class MySaxHandler extends DefaultHandler {//创建事件处理器 private Book book;//字段 private String tag;// 将东西保存到tag中 private ArrayList<Book> list; public ArrayList<Book> getList() { return list; } @Override public void characters(char[] arg0, int arg1, int arg2) throws SAXException { // TODO Auto-generated method stub super.characters(arg0, arg1, arg2); if (tag != null) {// 只有tag不为空时,tag中的内容是book中的内容 String s = new String(arg0, arg1, arg2).trim();// arg1代表字符数组的起始位置,arg2代表长度 if (tag.equals("title")) { book.setTitle(s); } if (tag.equals("author")) { book.setAuthor(s); } } } @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub super.endDocument(); } @Override public void endElement(String arg0, String arg1, String arg2) throws SAXException { // TODO Auto-generated method stub super.endElement(arg0, arg1, arg2); if (arg2.equals("book")) { list.add(book); book = null; } tag = null; } @Override public void startDocument() throws SAXException {//文档一开始就要建列表 // TODO Auto-generated method stub super.startDocument(); list = new ArrayList<Book>(); } @Override public void startElement(String arg0, String arg1, String arg2, Attributes arg3) throws SAXException { // TODO Auto-generated method stub super.startElement(arg0, arg1, arg2, arg3);// arg2保存当前元素的名字,arg3保存书号 if (arg2.equals("book")) { book = new Book(); String bookNo = arg3.getValue("bookno"); book.setBookNo(bookNo); } tag = arg2;// 把当前元素的名字保存到tag字段里 } }
5.创建xml解析工作的一个类
package test.java.com; import java.io.FileInputStream; import java.io.FileNotFoundException; 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; public class SaxParse implements xmlParse{//创建一个解析器实现解析接口(做xml解析工作的一个类) @Override public ArrayList<Book> parsexml(String fileName) { // TODO Auto-generated method stub ArrayList<Book> list = new ArrayList<Book>(); SAXParserFactory factory = SAXParserFactory.newInstance();//创建一个Sax解析器工厂 MySaxHandler handler = null;//准备一个事件处理器 try { SAXParser parser = factory.newSAXParser();//通过工厂来获取一个解析器对象 FileInputStream is = new FileInputStream(fileName);//fileName文件路径 handler = new MySaxHandler(); parser.parse(is, handler);// 将事件处理器配置给解析器 此时list也在handler中了 } catch (FileNotFoundException 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(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } list = handler.getList(); return list; } public static void main(String[] args){ xmlParse parse = new SaxParse(); ArrayList<Book> list = parse.parsexml("test.xml"); System.out.println("sax解析结果:"); for(Book book:list){ System.out.println(book); } } }
相关文章推荐
- 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