1 package com.demo.utils;2
3 import java.io.File;4
5 import javax.xml.parsers.DocumentBuilder;6 import javax.xml.parsers.DocumentBuilderFactory;7 import javax.xml.parsers.ParserConfigurationException;8 import javax.xml.transform.OutputKeys;9 import javax.xml.transform.Transformer;10 import javax.xml.transform.TransformerConfigurationException;11 import javax.xml.transform.TransformerException;12 import javax.xml.transform.TransformerFactory;13 import javax.xml.transform.dom.DOMSource;14 import javax.xml.transform.stream.StreamResult;15
16 import org.w3c.dom.Document;17 import org.w3c.dom.Element;18
19 /**20 * Document生成XML21 *22 * @author23 *24 */
25 public classCreateDocument {26
27 public static voidmain(String[] args) {28 //执行Document生成XML方法
29 createDocument(new File("E:\\person.xml"));30 }31
32 public static voidcreateDocument(File file) {33 try{34 //第一步:初始化一个XML解析工厂。
35 DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();36
37 //第二步:创建一个DocumentBuilder实例。
38 DocumentBuilder builder =factory.newDocumentBuilder();39
40 //第三步:构建一个Document实例。
41 Document doc =builder.newDocument();42 //standalone用来表示该文件是否呼叫其它外部的文件。若值是 "yes"表示没有呼叫外部文件
43 doc.setXmlStandalone(true);44
45 //第四步:创建一个根节点,名称为root,并设置一些基本属性。46 //创建一个根节点47 //说明: doc.createElement("元素名")、48 //element.setAttribute("属性名","属性值")、设置节点属性49 //element.setTextContent("标签间的内容"),设置标签之间的内容
50 Element element = doc.createElement("root");51 element.setAttribute("attr", "root");52
53 //创建根节点第一个子节点
54 Element elementChildOne = doc.createElement("userInfo");55 elementChildOne.setAttribute("attr", "userInfo1");56 element.appendChild(elementChildOne);57
58 //第一个子节点的第一个子节点
59 Element childOneOne = doc.createElement("zhangsansan");60 childOneOne.setAttribute("attr", "userInfo1");61 childOneOne.setTextContent("attr zhangsansan");62 elementChildOne.appendChild(childOneOne);63
64 //第一个子节点的第二个子节点
65 Element childOneTwo = doc.createElement("lisisi");66 childOneTwo.setAttribute("attr", "userInfo1");67 childOneTwo.setTextContent("attr lisisi");68 elementChildOne.appendChild(childOneTwo);69
70 //创建根节点第二个子节点
71 Element elementChildTwo = doc.createElement("userInfo");72 elementChildTwo.setAttribute("attr", "userInfo2");73 element.appendChild(elementChildTwo);74
75 //第二个子节点的第一个子节点
76 Element childTwoOne = doc.createElement("lisisi");77 childTwoOne.setAttribute("attr", "userInfo2");78 childTwoOne.setTextContent("attr lisisi");79 elementChildTwo.appendChild(childTwoOne);80
81 //第二个子节点的第二个子节点
82 Element childTwoTwo = doc.createElement("wangwuwu");83 childTwoTwo.setAttribute("attr", "userInfo2");84 childTwoTwo.setTextContent("attr wangwuwu");85 elementChildTwo.appendChild(childTwoTwo);86
87 //第五步:把节点添加到Document中,再创建一些子节点加入,添加根节点
88 doc.appendChild(element);89
90 //第六步:把构造的XML结构,写入到具体的文件中91 //把构造的XML结构,写入到具体的文件中
92 TransformerFactory formerFactory =TransformerFactory.newInstance();93 Transformer transformer =formerFactory.newTransformer();94 //换行
95 transformer.setOutputProperty(OutputKeys.INDENT, "YES");96 //文档字符编码
97 transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");98
99 //可随意指定文件的后缀,效果一样,但xml比较好解析,比如: E:\\person.txt等
100 transformer.transform(new DOMSource(doc), newStreamResult(file));101
102 System.out.println("XML CreateDocument success!");103 } catch(ParserConfigurationException e) {104 e.printStackTrace();105 } catch(TransformerConfigurationException e) {106 e.printStackTrace();107 } catch(TransformerException e) {108 e.printStackTrace();109 }110 }111
112 }