使用SAX方式生成XML文档

一、创建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文件内容的编写
			//打开document
				handler.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 block
			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();
		}
	}
}

运行后,在过程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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值