xml之SAX解析
发布时间:2020-12-16 05:38:43 所属栏目:百科 来源:网络整理
导读:1.什么是SAX(Simple API for XML)? 流模型中的推模型分析方式。通过事件驱动,每发现一个节点就引发一个事件,通过回调方法完成解析工作,解析XML文档的逻辑需要应用程序完成。 优点: 1、不需要等待所有数据都被处理,分析就能立即开始。 2、只在读取数据
1.什么是SAX(Simple API for XML)? 流模型中的推模型分析方式。通过事件驱动,每发现一个节点就引发一个事件,通过回调方法完成解析工作,解析XML文档的逻辑需要应用程序完成。
代码示例 : 1、javabean一个;
public class Book { private String id; private String name; private String author; private String year; private String price; private String language; 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 getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getYear() { return year; } public void setYear(String year) { this.year = year; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } public String getLanguage() { return language; } public void setLanguage(String language) { this.language = language; } }2.解析类
public class SAXTestCreate { public void saxCreateXml() { // 1、创建一个SAXTransformerFactory一个对象 SAXTransformerFactory sf = (SAXTransformerFactory) SAXTransformerFactory.newInstance(); OutputStream in = null; try { // 2、通过SAXTransformerFactory创建一个TransformerHandler对象 TransformerHandler handler = sf.newTransformerHandler(); // 3、通过TransformerHandler对象获取Transformer对象(用于设置xml输出的样式和头) Transformer transformer = handler.getTransformer(); // 设置没有其他的DTD(Document Type Defination 文档类型定义)规范 transformer.setOutputProperty(OutputKeys.STANDALONE,"yes"); // 设置编码格式,显式的显示在<?xml version="1.0" ?>中 transformer.setOutputProperty(OutputKeys.ENCODING,"utf-8"); // 设置换行 transformer.setOutputProperty(OutputKeys.INDENT,"yes"); // 文件输出 File file = new File("emp.xml"); // 确保file是存在的 if (!file.exists()) { if (!file.createNewFile()) { throw new FileNotFoundException("文件创建失败!"); } } // 4、创建输出流OutputStream对象 in = new FileOutputStream(file); // 5、创建流Result对象 Result result = new StreamResult(in); // 6、关联result,此时有了生成元素的方法(handler提供的方法)和装元素的容器(result对象) handler.setResult(result); // 打开文档 handler.startDocument(); // 属性设置 AttributesImpl attr = new AttributesImpl(); // 开始创建元素 handler.startElement("","","employees",attr); attr.addAttribute("","Name","小黑"); attr.addAttribute("","age","22"); handler.startElement("","employee",attr);// attr.clear(); attr.addAttribute("","德拉"); attr.addAttribute("","23"); handler.startElement("","salary",attr); handler.endElement("","salary"); handler.endElement("","employee");// // 结束元素创建 handler.endElement("","employees"); // 关闭文档 handler.endDocument(); } catch (TransformerConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { // 关闭流, 习惯不好,老是不喜欢关闭流 in.close(); } catch (IOException e) { e.printStackTrace(); } } } public void createXML() { Book b1 = new Book(); b1.setId("1"); b1.setName("冰与火之歌"); b1.setAuthor("乔治马丁"); b1.setYear("2014"); b1.setPrice("89"); Book b2 = new Book(); b2.setId("2"); b2.setName("安徒生童话"); b2.setAuthor("乔治马丁"); b2.setYear("2004"); b2.setPrice("77"); b2.setLanguage("English"); ArrayList<Book> bookList = new ArrayList<Book>(); bookList.add(b1); bookList.add(b2); // 生成xml // 1.创建一个TransformerFactory类的对象 SAXTransformerFactory tff = (SAXTransformerFactory) SAXTransformerFactory.newInstance(); try { // 2.通过SAXTransformerFactory对象创建一个TransformerHandler对象 TransformerHandler handler = tff.newTransformerHandler(); // 3.通过handler对象创建一个Transformer对象 // Transformer tr = handler.getTransformer(); // // 4.通过Transformer对象对生成的xml文件进行设置 // // 设置xml的编码 // tr.setOutputProperty(OutputKeys.ENCODING,"UTF-8"); // // 设置xml的“是否换行” // tr.setOutputProperty(OutputKeys.INDENT,"yes"); // 5.创建一个Result对象 File f = new File("src/res/newbooks.xml"); if (!f.exists()) { f.createNewFile(); } // 6.创建Result对象,并且使其与handler关联 Result result = new StreamResult(new FileOutputStream(f)); handler.setResult(result); // 7.利用handler对象进行xml文件内容的编写O // 打开document handler.startDocument(); AttributesImpl attr = new AttributesImpl(); handler.startElement("","bookstore",attr); for (Book book : bookList) { attr.clear(); attr.addAttribute("","id",book.getId()); handler.startElement("","book",attr); // 创建name节点 if (book.getName() != null && !book.getName().trim().equals("")) { attr.clear(); handler.startElement("","name",attr); handler.characters(book.getName().toCharArray(),book.getName().length()); handler.endElement("","name"); } // 创建year节点 if (book.getYear() != null && !book.getYear().trim().equals("")) { attr.clear(); handler.startElement("","year",attr); handler.characters(book.getYear().toCharArray(),book.getYear().length()); handler.endElement("","year"); } // 创建author节点 if (book.getAuthor() != null && !book.getAuthor().trim().equals("")) { attr.clear(); handler.startElement("","author",attr); handler.characters(book.getAuthor().toCharArray(),book.getAuthor().length()); handler.endElement("","author"); } // 创建price节点 if (book.getPrice() != null && !book.getPrice().trim().equals("")) { attr.clear(); handler.startElement("","price",attr); handler.characters(book.getPrice().toCharArray(),book.getPrice().length()); handler.endElement("","price"); } // 创建language节点 if (book.getLanguage() != null && !book.getLanguage().trim().equals("")) { attr.clear(); handler.startElement("","language",attr); handler.characters(book.getLanguage().toCharArray(),book.getLanguage().length()); handler.endElement("","language"); } handler.endElement("","book"); } handler.endElement("","bookstore"); // 关闭document handler.endDocument(); } catch (TransformerConfigurationException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } } /** * @param args */ public static void main(String[] args) { SAXTestCreate test = new SAXTestCreate(); // test.createXML(); test.saxCreateXml(); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |