-----------------------有疑问请留言,我会尽量解答-------------------------------
要点:1通过dom工厂类生成dom类,dom类新建dom对象
2通过file指定文件生成所在的目录并且指定输入源。
3通过Transformer工厂类生成Transformer并且导入dom结构到文件中
方法:
Document.createElement()创建根节点
Document.createComment()创建注释
Document.appendChild()添加子节点
Document.createCDATASection()添加cdata(注:防止内容被当做节点解析)
Element.setAttribute()给节点加属性
Transformer.setOutputProperty()格式化xml文件(否则所有dom结构会输出在一行里)
实例:(jdk为1.6,需要注意引用的包是w3c的)
package com.focustech.ins.web.addlist.controller;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import com.caucho.xtpdoc.Book;
import org.jdom.Comment;
import org.w3c.dom.Document;
import org.jdom.JDOMException;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.w3c.dom.CDATASection;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
/**
* Created by qiyanzhou on 2016/12/19.
*/
public class CreateXmlController {
public void BuildXMLDoc() throws Exception {
// 创建根节点 并设置它的属性 ;
//解析器工厂类
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//解析器
DocumentBuilder builder = factory.newDocumentBuilder();
//操作的Document对象
Document document = builder.newDocument();
//设置XML的版本
document.setXmlVersion("1.0");
//创建根节点
Element root = document.createElement("function-config");
//添加注释
Node common=document.createComment("main config file ,this config file is required");
root.appendChild(common);
Element globalSql = document.createElement("global-sql");
Element sql = document.createElement("sql");
sql.setAttribute("id", "global");
CDATASection cdataPart1 = document.createCDATASection("select * from dual");
root.appendChild(globalSql);
globalSql.appendChild(sql);
sql.appendChild(cdataPart1);
//核心sql
Element system = document.createElement("system");
system.setAttribute("sysId", "0000");
root.appendChild(system);
Element function = document.createElement("function");
function.setAttribute("id", "20160913");
function.setAttribute("beanName", "");
system.appendChild(function);
Element executeSql = document.createElement("execute-sql");
function.appendChild(executeSql);
Element sqlPart2 = document.createElement("sql");
sqlPart2.setAttribute("id","activefinancial");
CDATASection mainSql = document.createCDATASection("核心sql");
sqlPart2.appendChild(mainSql);
executeSql.appendChild(sqlPart2);
Element funcSql = document.createElement("func-sql");
funcSql.setAttribute("id","20160913");
funcSql.setAttribute("sqlId","activefinancial");
funcSql.setAttribute("loop","false");
funcSql.setAttribute("sqlType","select");
funcSql.setAttribute("argGroup","0");
funcSql.setAttribute("executer","");
function.appendChild(funcSql);
Element params = document.createElement("params");
params.setAttribute("id","");
params.setAttribute("errMsg","error");
funcSql.appendChild(params);
//将根节点添加到Document对象中
document.appendChild(root);
//开始把Document映射到文件
Transformer transformer = TransformerFactory.newInstance().newTransformer();
//控制缩进(格式化xml文件,避免输出在一行)
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
//设置输出结果
DOMSource domSource = new DOMSource(document);
//生成xml文件
File file = new File("C:\\git\\apollo\\apollo-admin\\apollo-admin-web\\src\\main\\webapp\\WEB-INF\\extend-configs\\books.xml");
//判断是否存在,如果不存在,则创建
if(!file.exists()){
file.createNewFile();
}
//文件输出流
FileOutputStream out = new FileOutputStream(file);
//设置输入源
StreamResult xmlResult = new StreamResult(out);
//输出xml文件
transformer.transform(domSource, xmlResult);
}
public static void main(String[] args) {
try {
CreateXmlController j2x = new CreateXmlController();
System.out.println("正在生成 books.xml 文件...");
j2x.BuildXMLDoc();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("c:/books.xml 文件已生成");
}
}