1 public void createXML() throws Exception{
2 Book b1 = new Book();
3 b1.setId("1");
4 b1.setName("Core java");
5 b1.setAuthor("Horstmann");
6 b1.setPrice("36");
7 b1.setVersion("4.0");
8 Book b2=new Book();
9 b2.setId("2");
10 b2.setName("Thinking in java");
11 b2.setAuthor("jackli");
12 b2.setPrice("50");
13 b2.setVersion("5.0");
14 b2.setLanguage("English");
15 ArrayList<Book> booklist=new ArrayList<Book>();
16 booklist.add(b1);
17 booklist.add(b2);
18
19 //1:创建一个SAXTransformerFactory对象
20 SAXTransformerFactory saxtransformerfactory = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
21 //2:创建TransformerHandler对象
22 TransformerHandler transformerhandler=saxtransformerfactory.newTransformerHandler();
23 //3:创建Transformer对象
24 Transformer transformer=transformerhandler.getTransformer();
25 //4:利用transformer的对象对xml文件格式进行设置
26 //1:利用OutputKeys.ENCODING设定xml文件的编码
27 transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
28 //2:利用OutputKeys.INDENT设定xml文件是否换行
29 transformer.setOutputProperty(OutputKeys.INDENT, "yes");
30 //5:创建file对象用来保存xml文件
31 File file=new File("C:\Users\XIA\Desktop\book2.xml");
32 if(!file.exists())//用一个if语句判断,file文件是否存在,如果不存在的话,则 创建一个相应的file文件
33 {
34 file.createNewFile();
35 }
36
37 //6创建RESULT对象,使其与TransformerHandler的对象相关联
38 Result result=new StreamResult(new FileOutputStream(file));
39 transformerhandler.setResult(result);
40
41 /*
42 * 上面准备工作完毕,接下来就应该利用TransformerHandler对象对xml文件的节点进行编写
43 * 7:接下来主要工作就是利用startDocument,endDocument,startElement,endElement等方法编写bookstore的各个节点
44 * 8: //创建AttributesImpl对象,为下面循环使用attr而做准备的,是xml文件中的每一个节点都可以赋属性
45 * 9:注意一定要清空bookstore中attr属性,因为如果bookstore中属性值存在的话,是会影响后面book节点的属性值的
46 * 10:对于节点之间的文本文件的建立用characters()方法,其中第一个参数是char[]数组,第二个参数是数组的开始位置,第三个参数是数组的结束位置。
47 */
48
49 transformerhandler.startDocument();
50 AttributesImpl attr=new AttributesImpl();
51
52 transformerhandler.startElement("", "", "bookstore", attr);
53 for (Book book : booklist) {
54 attr.clear();
55 attr.addAttribute("", "", "id", "", "1");
56 transformerhandler.startElement("", "", "book", attr);
57 /*
58 * 创建name节点
59 */
60 if(book.getName()!=null&&!book.getName().trim().equals(""))
61 {
62 attr.clear();
63 transformerhandler.startElement("", "", "name", attr);
64 transformerhandler.characters(book.getName().toCharArray(), 0, book.getName().length());
65 transformerhandler.endElement("", "", "name");
66 }
67 /*
68 * 创建author节点
69 */
70 if(book.getAuthor()!=null&&!book.getAuthor().trim().equals(""))
71 {
72 attr.clear();
73 transformerhandler.startElement("", "", "author", attr);
74 transformerhandler.characters(book.getAuthor().toCharArray(), 0, book.getAuthor().length());
75 transformerhandler.endElement("", "", "author");
76 }
77 /*
78 * 创建price节点
79 */
80 if (book.getPrice()!=null&&!book.getPrice().trim().equals("")) {
81 attr.clear();
82 transformerhandler.startElement("", "", "price", attr);
83 transformerhandler.characters(book.getPrice().toCharArray(), 0, book.getPrice().length());
84 transformerhandler.endElement("", "", "price");
85 }
86 /*
87 * 创建version节点
88 */
89 if(book.getVersion()!=null&&!book.getVersion().trim().equals(""))
90 {
91 attr.clear();
92 transformerhandler.startElement("", "", "version", attr);
93 transformerhandler.characters(book.getVersion().toCharArray(), 0, book.getVersion().length());
94 transformerhandler.endElement("", "", "version");
95 }
96 /*
97 * 创建language节点
98 */
99 if (book.getLanguage()!=null&&!book.getLanguage().trim().equals("")) {
100 attr.clear();
101 transformerhandler.startElement("", "", "language", attr);
102 transformerhandler.characters(book.getLanguage().toCharArray(), 0, book.getLanguage().length());
103 transformerhandler.endElement("", "", "language");
104 }
105
106 transformerhandler.endElement("", "", "book");
107 }
108 transformerhandler.endElement("", "", "bookstore");
109 transformerhandler.endDocument();
110 }
111
112 public static void main(String[] args) throws Exception {
113 SAXTest test=new SAXTest();
114 test.createXML();
115 }
注意:
//6创建RESULT对象,使其与TransformerHandler的对象相关联
Result result=new StreamResult(new FileOutputStream(file));
transformerhandler.setResult(result);
这里面创佳妮result对象,必须在调用StartDocument()方法之前开始调用,而且这一步是把handler对象与result结合在一起的关键。