怎么用SAX生成xml文件
发布日期:2021-05-09 08:19:24 浏览次数:25 分类:原创文章

本文共 5379 字,大约阅读时间需要 17 分钟。

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



 

上一篇:Socket编程——怎么实现一个服务器多个客户端之间的连接
下一篇:javaxml文件基础:Dom怎么生成xml文件

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年04月24日 22时45分27秒