• Java生成XML文件


    上一篇文章写了xml文件4种读取方式,本篇文章将简介使用四种方式对xml进行写入。

    1. DOM
    2. SAX
    3. DOM4j
    4. JDOM

    1.DOM

     1 import java.io.File;
     2 
     3 import javax.xml.parsers.DocumentBuilder;
     4 import javax.xml.parsers.DocumentBuilderFactory;
     5 import javax.xml.transform.OutputKeys;
     6 import javax.xml.transform.Transformer;
     7 import javax.xml.transform.TransformerFactory;
     8 import javax.xml.transform.dom.DOMSource;
     9 import javax.xml.transform.stream.StreamResult;
    10 
    11 import org.w3c.dom.Document;
    12 import org.w3c.dom.Element;
    13 
    14 public class DomToXmlDemo {
    15 
    16     /**
    17      * 生成xml方法
    18      */
    19     public static void createXml() {
    20         try {
    21             // 1.创建DocumentBuilderFactory对象
    22             DocumentBuilderFactory factory = DocumentBuilderFactory
    23                     .newInstance();
    24             // 2.创建DocumentBuilder对象
    25             DocumentBuilder builder = factory.newDocumentBuilder();
    26             // 3.创建Document对象
    27             Document document = builder.newDocument();
    28             // 4.设置不显示“standalone="no"”
    29             document.setXmlStandalone(true);
    30 
    31             // 5.创建根元素bookstore
    32             Element bookstore = document.createElement("bookstore");
    33 
    34             // 6.循环向bookstore根节点中添加子节点book
    35             for (int i = 1; i <= 3; i++) {
    36                 Element book = document.createElement("book");
    37                 // 7.向book根节点中添加子节点name
    38                 Element name = document.createElement("name");
    39                 name.setTextContent("Java程序设计" + i);
    40                 book.appendChild(name);
    41 
    42                 // 向book根节点中添加子节点author
    43                 Element author = document.createElement("author");
    44                 author.setTextContent("张三" + i);
    45                 book.appendChild(author);
    46 
    47                 // 向book根节点中添加子节点author
    48                 Element price = document.createElement("price");
    49                 price.setTextContent("6" + i);
    50                 price.setAttribute("type", "元");
    51                 book.appendChild(price);
    52 
    53                 // 8.为book节点添加属性
    54                 book.setAttribute("id", "0" + i);
    55                 // 9.将book节点添加到bookstore根节点中
    56                 bookstore.appendChild(book);
    57             }
    58 
    59             // 10.将bookstore节点(已包含book)添加到dom树中
    60             document.appendChild(bookstore);
    61 
    62             // 11.创建TransformerFactory对象
    63             TransformerFactory tff = TransformerFactory.newInstance();
    64             // 12.创建 Transformer对象
    65             Transformer tf = tff.newTransformer();
    66             // 13.输出内容是否使用换行
    67             tf.setOutputProperty(OutputKeys.INDENT, "yes");
    68 
    69             // 14.创建xml文件并写入内容
    70             tf.transform(new DOMSource(document), new StreamResult(new File(
    71                     "book1.xml")));
    72             System.out.println("生成book1.xml成功");
    73         } catch (Exception e) {
    74             e.printStackTrace();
    75             System.out.println("生成book1.xml失败");
    76         }
    77     }
    78 
    79     public static void main(String[] args) {
    80         Long start = System.currentTimeMillis();
    81         createXml();
    82         System.out.println("运行时间:" + (System.currentTimeMillis() - start));
    83     }
    84 
    85 }

     运行结果:

    2.SAX

     1 import java.io.File;
     2 import java.io.FileOutputStream;
     3 
     4 import javax.xml.transform.OutputKeys;
     5 import javax.xml.transform.Result;
     6 import javax.xml.transform.Transformer;
     7 import javax.xml.transform.sax.SAXTransformerFactory;
     8 import javax.xml.transform.sax.TransformerHandler;
     9 import javax.xml.transform.stream.StreamResult;
    10 
    11 import org.xml.sax.helpers.AttributesImpl;
    12 
    13 public class SaxToXmlDemo {
    14 
    15     // 生成xml
    16     public static void createXml() {
    17         // 1、创建一个SAXTransformerFactory类的对象
    18         SAXTransformerFactory tff = (SAXTransformerFactory) SAXTransformerFactory
    19                 .newInstance();
    20         try {
    21             // 2、通过SAXTransformerFactory创建一个TransformerHandler的对象
    22             TransformerHandler handler = tff.newTransformerHandler();
    23             // 3、通过handler创建一个Transformer对象
    24             Transformer tr = handler.getTransformer();
    25             // 4、通过Transformer对象对生成的xml文件进行设置
    26             // 设置编码方式
    27             tr.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
    28             // 设置是否换行
    29             tr.setOutputProperty(OutputKeys.INDENT, "yes");
    30             // 5、创建一个Result对象
    31             File f = new File("book2.xml");
    32             // 判断文件是否存在
    33             if (!f.exists()) {
    34                 f.createNewFile();
    35             }
    36             Result result = new StreamResult(new FileOutputStream(f));
    37             // 6、使Result与handler关联
    38             handler.setResult(result);
    39 
    40             // 打开document
    41             handler.startDocument();
    42             AttributesImpl attr = new AttributesImpl();
    43             handler.startElement("", "", "bookstore", attr);
    44             // attr.clear();
    45 
    46             for (int i = 1; i <= 3; i++) {
    47                 attr.clear();
    48                 attr.addAttribute("", "", "id", "", "0" + i);
    49                 handler.startElement("", "", "book", attr);
    50 
    51                 // 创建name
    52                 attr.clear();
    53                 handler.startElement("", "", "name", attr);
    54                 String name = "Java程序设计" + i;
    55                 handler.characters(name.toCharArray(), 0, name.length());
    56                 handler.endElement("", "", "name");
    57 
    58                 // 创建author
    59                 attr.clear();
    60                 handler.startElement("", "", "author", attr);
    61                 String author = "张三" + i;
    62                 handler.characters(author.toCharArray(), 0, author.length());
    63                 handler.endElement("", "", "author");
    64 
    65                 // 创建price
    66                 attr.clear();
    67                 attr.addAttribute("", "", "type", "", "元");
    68                 handler.startElement("", "", "price", attr);
    69                 double price = 60 + i;
    70                 handler.characters(("" + price).toCharArray(), 0,
    71                         ("" + price).length());
    72                 handler.endElement("", "", "price");
    73 
    74                 handler.endElement("", "", "book");
    75             }
    76             handler.endElement("", "", "bookstore");
    77             // 关闭document
    78             handler.endDocument();
    79             System.out.println("生成book2.xml成功");
    80         } catch (Exception e) {
    81             e.printStackTrace();
    82             System.out.println("生成book2.xml失败");
    83         }
    84     }
    85 
    86     public static void main(String[] args) {
    87         Long start = System.currentTimeMillis();
    88         createXml();
    89         System.out.println("运行时间:" + (System.currentTimeMillis() - start));
    90     }
    91 }

     运行结果:

    3.DOM4j

     1 import java.io.File;
     2 import java.io.FileOutputStream;
     3 
     4 import org.dom4j.Document;
     5 import org.dom4j.DocumentHelper;
     6 import org.dom4j.Element;
     7 import org.dom4j.io.OutputFormat;
     8 import org.dom4j.io.XMLWriter;
     9 
    10 public class Dom4jToXmlDemo {
    11 
    12     /**
    13      * 生成xml方法
    14      */
    15     public static void createXml() {
    16         try {
    17             // 1、创建document对象
    18             Document document = DocumentHelper.createDocument();
    19             // 2、创建根节点bookstore
    20             Element bookstore = document.addElement("bookstore");
    21             // 3、向bookstore节点添加version属性
    22             bookstore.addAttribute("address", "新华书店");
    23             // 4、生成子节点及子节点内容
    24             Element book = bookstore.addElement("book");
    25             book.addAttribute("id", "01");
    26             Element name = book.addElement("name");
    27             name.setText("Java程序设计");
    28             Element author = book.addElement("author");
    29             author.setText("张三");
    30             Element price = book.addElement("price");
    31             price.setText("60");
    32             price.addAttribute("type", "元");
    33 
    34             // 5、设置生成xml的格式
    35             OutputFormat format = OutputFormat.createPrettyPrint();
    36             // 设置编码格式
    37             format.setEncoding("UTF-8");
    38 
    39             // 6、生成xml文件
    40             File file = new File("book3.xml");
    41             XMLWriter writer = new XMLWriter(new FileOutputStream(file), format);
    42             // 设置是否转义,默认使用转义字符
    43             writer.setEscapeText(false);
    44             writer.write(document);
    45             writer.close();
    46             System.out.println("生成book3.xml成功");
    47         } catch (Exception e) {
    48             e.printStackTrace();
    49             System.out.println("生成book3.xml失败");
    50         }
    51     }
    52 
    53     public static void main(String[] args) {
    54         Long start = System.currentTimeMillis();
    55         createXml();
    56         System.out.println("运行时间:" + (System.currentTimeMillis() - start));
    57     }
    58 
    59 }

    运行结果:

    4.JDOM

     1 import java.io.File;
     2 import java.io.FileOutputStream;
     3 
     4 import org.jdom2.Document;
     5 import org.jdom2.Element;
     6 import org.jdom2.output.Format;
     7 import org.jdom2.output.XMLOutputter;
     8 
     9 public class JdomToXmlDemo {
    10 
    11     /**
    12      * 生成xml方法
    13      */
    14     public static void createXml() {
    15         try {
    16             // 1、生成一个根节点
    17             Element bookstore = new Element("bookstore");
    18             // 2、为节点添加属性
    19             bookstore.setAttribute("address", "新华书店");
    20             // 3、生成一个document对象
    21             Document document = new Document(bookstore);
    22 
    23             Element book = new Element("book");
    24             book.setAttribute("id", "01");
    25             bookstore.addContent(book);
    26             Element name = new Element("name");
    27             name.setText("Java程序设计");
    28             book.addContent(name);
    29             Element author = new Element("author");
    30             author.setText("张三");
    31             book.addContent(author);
    32             Element price = new Element("price");
    33             price.setText("60");
    34             price.setAttribute("type", "元");
    35             book.addContent(price);
    36 
    37             Format format = Format.getCompactFormat();
    38             // 设置换行Tab或空格
    39             format.setIndent("    ");
    40             format.setEncoding("UTF-8");
    41 
    42             // 4、创建XMLOutputter的对象
    43             XMLOutputter outputer = new XMLOutputter(format);
    44             
    45             // 5、利用outputer将document转换成xml文档
    46             File file = new File("book4.xml");
    47             outputer.output(document, new FileOutputStream(file));
    48 
    49             System.out.println("生成book4.xml成功");
    50         } catch (Exception e) {
    51             System.out.println("生成book4.xml失败");
    52         }
    53     }
    54 
    55     public static void main(String[] args) {
    56         Long start = System.currentTimeMillis();
    57         createXml();
    58         System.out.println("运行时间:" + (System.currentTimeMillis() - start));
    59     }
    60 
    61 }

    运行结果:

  • 相关阅读:
    WxInput模块则比较彻底的解决了这个问题
    使用context来传递数据,一个context是一系列变量
    demo工程的清单文件及activity中api代码简单示例
    Tomcat学习总结(6)——Tomca常用配置详解
    Tomcat学习总结(5)——Tomcat容器管理安全的几种验证方式
    Tomcat学习总结(4)——基于Tomcat7、Java、WebSocket的服务器推送聊天室
    Tomcat学习总结(3)——Tomcat优化详细教程
    Tomcat学习总结(2)——Tomcat使用详解
    Tomcat学习总结(1)——Tomcat入门教程
    TCP/IP协议:OSI七层模型、TCP/IP四层模型的对比
  • 原文地址:https://www.cnblogs.com/lihuawei/p/14619606.html
Copyright © 2020-2023  润新知