怎么用SAX生成xml文件

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



 

转载于:https://www.cnblogs.com/xiaxj/p/5905108.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值