zoukankan      html  css  js  c++  java
  • 怎么用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结合在一起的关键。



  • 相关阅读:
    Spread Studio中文支持图解
    C#反射实例No.1
    关于XML序列化的简单例子
    将数据结构类型序列化和反序列化(BinaryFormatter类)
    获取计算机名称,IP,MAC地址
    原始套接字发送自定义IP包
    IP包首部格式
    struct和byte[]相互转换(用Marshal类实现)
    图片保存到数据库和从数据库读取图片并显示(C#)
    单词分析器源码
  • 原文地址:https://www.cnblogs.com/xiaxj/p/5905108.html
Copyright © 2011-2022 走看看