XML生成(二):SAX生成XML
来源:互联网 发布:阴阳师神龙强化数据 编辑:程序博客网 时间:2024/05/16 17:56
SAX生成XML文件的基本流程
1.创建SAXTransformerFactor对象
2.通过SAXTransformerFactor对象创建TransformerHandler对象
3.通过TransformerHandler对象创建Transformer对象
4.创建Result对象,与目的文件关联,并将此对象与TransformerHandler对象关联
5.创建AttributesImpl对象(此对象为节点的属性)
6.使用TransformerHandler对象的startDocument()开始文档,文档编写结束后调用endDocument()方法结束文档
7.使用TransformerHandler对象的startElement()开始元素,此方法有四个参数(名称空间URI,本地名称localName,限定名qName,连接到元素的属性Atrributes);元素结束后调用endElement()方法结束对应元素,此方法有三个参数(名称空间URI,本地名称localName,限定名qName)
8.使用TransformerHandler对象的characters()方法为每个元素设置文本数据
示例
本示例是基于解析book.xml文件所得结果进行生成
package wds.test;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import javax.xml.transform.OutputKeys;import javax.xml.transform.Result;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerConfigurationException;import javax.xml.transform.sax.SAXTransformerFactory;import javax.xml.transform.sax.TransformerHandler;import javax.xml.transform.stream.StreamResult;import org.xml.sax.SAXException;import org.xml.sax.helpers.AttributesImpl;import wds.entity.Book;import wds.handler.SAXParserHandler;public class SAXCreateXML { /** * @param args */ public ArrayList<Book> parseXML() { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParserHandler handler = null; try { SAXParser parser = factory.newSAXParser(); handler = new SAXParserHandler(); parser.parse("book.xml", handler); System.out.println("···········共有" + handler.getList().size() + "本书···········"); for (Book book : handler.getList()) { System.out.println(book.toString()); } } 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(); } return handler.getList(); } public void createXML() { // 解析所得Book的list集合 ArrayList<Book> bookList = parseXML(); // 1.创建一个SAXTransformerFactor类对象 SAXTransformerFactory tff = (SAXTransformerFactory) SAXTransformerFactory .newInstance(); try { // 2.通过TransformerFactory对象创建TransformerHandler对象 // newTransformerHandler()此方法获取能够将SAX // ContentHandler事件处理为Result的TransformerHandler对象 TransformerHandler handler = tff.newTransformerHandler(); // 3. 创建Transformer对象 Transformer为抽象类 此类的实例能够将源树转换为结果树 Transformer tf = handler.getTransformer(); // 4 .通过transformer对象对xml文件进行 配置 // 设置编码 tf.setOutputProperty(OutputKeys.ENCODING, "utf-8"); // 设置是否换行 tf.setOutputProperty(OutputKeys.INDENT, "yes"); // 设置目的文件 File f = new File("src/res/newbook.xml"); // 若文件不存在,新创建一个 if (!f.exists()) { f.createNewFile(); } // 5. 创建Result对象将目的文件与之关联 Result result = new StreamResult(new FileOutputStream(f)); // 将Result对象与handler关联 handler.setResult(result); // 6.利用handler对象对xml内容进行编写 // 打开document handler.startDocument(); // 属性对象 AttributesImpl attr = new AttributesImpl(); handler.startElement("", "", "bookstore", attr); for (Book book : bookList) { // 每次使用属性对象,将其清空 attr.clear(); // 为book属性赋值 attr.addAttribute("", "", "id", "", book.getId()); handler.startElement("", "", "book", attr); if (book.getName() != null && !book.getName().trim().equals("")) { attr.clear(); handler.startElement("", "", "name", attr); handler.characters(book.getName().toCharArray(), 0, book .getName().length()); handler.endElement("", "", "name"); } if (book.getAuthor() != null && !book.getAuthor().trim().equals("")) { handler.startElement("", "", "author", attr); handler.characters(book.getAuthor().toCharArray(), 0, book .getAuthor().length()); handler.endElement("", "", "author"); } if (book.getYear() != null && !book.getYear().trim().equals("")) { handler.startElement("", "", "year", attr); handler.characters(book.getYear().toCharArray(), 0, book .getYear().length()); handler.endElement("", "", "year"); } if (book.getPrice() != null && !book.getPrice().trim().equals("")) { handler.startElement("", "", "price", attr); handler.characters(book.getPrice().toCharArray(), 0, book .getPrice().length()); handler.endElement("", "", "price"); } handler.endElement("", "", "book"); } handler.endElement("", "", "bookstore"); // 关闭document handler.endDocument(); } catch (TransformerConfigurationException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { // TODO Auto-generated method stub new SAXCreateXML().createXML(); }}
生成的XML文件
newbook.xml
<?xml version="1.0" encoding="utf-8"?><bookstore><book id="1"><name>java编程思想</name><author>Bruce Eckel</author><year>2015</year><price>79</price></book><book id="2"><name>深入理解java虚拟机</name><author>周志明</author><price>40</price></book></bookstore>
阅读全文
0 0
- XML生成(二):SAX生成XML
- java解析与生成xml(二): SAX
- SAX生成XML
- SAX生成xml文件
- sax生成xml文件
- SAX解析,生成xml文件
- 使用Sax生成xml文件
- Java生成xml——SAX生成
- Java编程中操作XML文件(生成方法二:SAX)
- Java之SAX 方式生成 XML(学习笔记)
- SAX生成和解析XML文档
- Android SAX解析与生成XML
- SAX解析和生成XML文档
- SAX解析和生成XML文档
- SAX解析和生成XML文档
- SAX解析和生成XML文档
- Android-Sax解析与生成xml数据
- 使用SAX方式生成XML文档
- 【juincen】mac上搭建php环境
- 快递接口
- maven_nexus私服搭建
- 2018网易校招编程题(1)彩色的砖块
- 交叉编译器
- XML生成(二):SAX生成XML
- spark实现PageRank
- 金色梦乡
- Linux学习笔记(1)-常用命令
- SSM_OA的web.xml文件简单配置
- 简单工厂模式VS工厂方法模式
- Count the string HDU
- Redis : Jedis性能测试
- 数据库SQL实战-答案解析(15-20)