通过java生成xml文件

-----------------------有疑问请留言,我会尽量解答-------------------------------

要点: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 文件已生成");
}
}

转载于:https://my.oschina.net/u/3197054/blog/817567

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值