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结合在一起的关键。