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 }

运行结果:

 

posted @ 2021-04-05 22:39  熊猫Panda先生  阅读(1726)  评论(0编辑  收藏  举报