一般来说xml文件格式被认为是一种很好的数据交换格式。那么我们如何将其它形式的文件在java程序中转化成XML格式的文件呢?
在java.xml.transform包中的几个类,可以处理xml的转换。
一、下面是转换步骤:
(1)、创建文档对象
(2)、创建TransformerFactory实例;
(3)、使用TransformerFactory创建Transformer实例
(4)、使用transform()方法将源树输出到结果中(这里以流的形式输出到源文件中)
二、下面是一个例子
将一个已经创建好的xml文件通过流转换为DOM文件,对其进行加工,然后再转换为xml格式。
package com.xml.demo;
import java.io.File;
import java.io.FileOutputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class MyWriterXMLByDOM {
public static void main(String[] args) {
//得到DOM解析器工厂实例
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Element theBook = null, theElem = null, root = null;
try {
//设置由此工厂创建的解析器在解析xml文档的时候,必须删除元素的内容中的空格
factory.setIgnoringElementContentWhitespace(true);
//由DOM解析器工厂生成DOM解析器实例db
DocumentBuilder db = factory.newDocumentBuilder();
File file = new File("WebRoot\\t.xml");
//解析xml文档的输入流,得到一个Document
Document xmldoc = db.parse(file);
//得到document的根节点
root = xmldoc.getDocumentElement();
//在dom文档中增加一个theBook节点,且为该节点追加三个子节点
theBook = xmldoc.createElement("book");
theElem = xmldoc.createElement("name");
theElem.setTextContent("java高级程序设计");
//将theElem节点转化为theBook的子节点
theBook.appendChild(theElem);
theElem = null;
theElem = xmldoc.createElement("price");
theElem.setTextContent("20");
//将theElem节点转化为theBook的子节点
theBook.appendChild(theElem);
theElem = null;
theElem = xmldoc.createElement("note");
theElem.setTextContent("看过不后悔");
theBook.appendChild(theElem);
//把theBook节点插入为根节点的子节点
root.appendChild(theBook);
//将dom文档转化为xml文档
//创建翻译器的生产工厂的实例
TransformerFactory transFactory = TransformerFactory.newInstance();
//由翻译器的生产工厂生产翻译器
Transformer transformer = transFactory.newTransformer();
//给我们的翻译器准备要翻译的原料(把我们的xmldoc文档转化成翻译器transformer能够翻译的DOMSource对象)
DOMSource source = new DOMSource(xmldoc);
//准备一个存放翻译器翻译结果的载体
StreamResult result = new StreamResult(new FileOutputStream(file));
//开动翻译器,进行翻译
transformer.transform(source, result);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行结果:
t.xml内容改变