使用SAX方式生成XML文档

来源:互联网 发布:柏拉图表软件 编辑:程序博客网 时间:2024/06/06 02:59

一、创建SAXTransformerFactory对象

二、创建TransformeHandler对象

三、通过TransformerHandler对象创建一个Transformer对象

四、通过Transformer对象对生成的xml文件进行设置

五、创建Result对象,并且使其与handler关联

六、利用handler对象进行xm文件内容的编写


新建Book.java用于封装Book的属性:

package com.imooc.io;public class Book {private String id;private String name;private String author;private String year;private String price;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;}}

新建SAXCreateXML.java,里面写使用SAX生成XML文件的方法,并用于测试:

package com.imooc.io;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;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;public class SAXCreateXML {public static void main(String[] args){SAXCreateXML t = new SAXCreateXML();t.CreateXML();}public void CreateXML(){Book book1 = new Book();Book book2 = new Book();book1.setId("1");book1.setName("后会无期");book1.setAuthor("lcb");book1.setYear("2010");book1.setPrice("35");book2.setId("2");book2.setName("异次元");book2.setAuthor("lcb");book2.setYear("2011");book2.setPrice("40");ArrayList<Book> booklist = new ArrayList<Book>();booklist.add(book1);booklist.add(book2);//创建SAXTransformerFactory对象SAXTransformerFactory tff = (SAXTransformerFactory) SAXTransformerFactory.newInstance();//创建TransformeHandler对象try {TransformerHandler handler = tff.newTransformerHandler();// 3.通过TransformerHandler对象创建一个Transformer对象    Transformer tr = handler.getTransformer();    // 4.通过Transformer对象对生成的xml文件进行设置// 设置xml的编码//tr.setOutputProperty(OutputKeys.ENCODING, "UTF-8");// 设置xml的“是否换行”tr.setOutputProperty(OutputKeys.INDENT, "yes");File f = new File("src/newbook2.xml");if(!f.exists()){f.createNewFile();}//创建Result对象,并且使其与handler关联Result result = new StreamResult(new FileOutputStream(f));handler.setResult(result);//利用handler对象进行xm文件内容的编写//打开documenthandler.startDocument();AttributesImpl attr = new AttributesImpl();//打开bookstor开始标签handler.startElement("", "", "bookstore", attr);for(Book book : booklist){attr.clear();attr.addAttribute("", "", "id", "", book.getId());//打开book节点handler.startElement("", "", "book", attr);//创建name节点if(book.getName()!=null && !book.getName().trim().equals("")){//每次用之前清空attr的属性attr.clear();handler.startElement("", "", "name", attr);handler.characters(book.getName().toCharArray(), 0, book.getName().length());handler.endElement("", "", "name");}//创建authoe节点if(book.getAuthor()!=null && !book.getAuthor().trim().equals("")){//每次用之前清空attr的属性attr.clear();handler.startElement("", "", "author", attr);handler.characters(book.getAuthor().toCharArray(), 0, book.getAuthor().length());handler.endElement("", "", "author");}//创建year节点if(book.getYear()!=null && !book.getYear().trim().equals("")){//每次用之前清空attr的属性attr.clear();handler.startElement("", "", "year", attr);handler.characters(book.getYear().toCharArray(), 0, book.getYear().length());handler.endElement("", "", "year");}//创建price节点if(book.getPrice()!=null && !book.getPrice().trim().equals("")){//每次用之前清空attr的属性attr.clear();handler.startElement("", "", "price", attr);handler.characters(book.getPrice().toCharArray(), 0, book.getPrice().length());handler.endElement("", "", "price");}handler.endElement("", "", "book");}handler.endElement("", "", "bookstore");handler.endDocument();} catch (TransformerConfigurationException e) {// TODO Auto-generated catch blocke.printStackTrace();}catch (FileNotFoundException e) {e.printStackTrace();}catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}catch (SAXException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

运行后,在过程src文件目录下会生成newbook2.xml文件,XML代码如下:

<?xml version="1.0" encoding="UTF-8"?><bookstore><book id="1"><name>后会无期</name><author>lcb</author><year>2010</year><price>35</price></book><book id="2"><name>异次元</name><author>lcb</author><year>2011</year><price>40</price></book></bookstore>




0 0
原创粉丝点击