DOM生成XML文件的基本流程
创建DOM树
步骤:
1.创建DocumentBuilderFactory对象
2.通过DocumentBuilderFactroy对象创建DocumentBuilder对象
3.通过DocumentBuilder对象的newDocument()方法创建Document对象代表整个XML文件
4.通过Document对象的createElement()方法创建Element对象为节点
5.通过Element对象的appendChild(element)方法,根据节点之间的关系添加子节点
6.通过Element对象的setTextContent()方法给节点添加文本,setAttribute()方法添加属性
将DOM树转换为XML文件
步骤:
1.创建TransformerFactory对象
2.通过TransformerFactory对象创建Transformer对象
3.通过Transformer对象的transformer()方法进行转换(此方法有两个参数,第一个参数是数据源,即创建的DOM树,第二个参数是目的文件, 即需要生成的XML文件,使用StreamResult对象指定)
示例
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
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 DOMCreateXML {
/**
* @param args
*/
private DocumentBuilder getDocumentBuilder(){
//创建DocumentBuilderFactory对象
DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
DocumentBuilder db=null;
try {
//创建DocumentBuilder对象
db=dbf.newDocumentBuilder();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return db;
}
public void createXML(){
//得到DocumentBuilder对象
DocumentBuilder db=getDocumentBuilder();
//创建document对象
Document document = db.newDocument();
//standalone属性,表示当前XML是否有相应的dtd或schema文件
//设置为true,没有约束文件不显示该属性
document.setXmlStandalone(true);
//创建根结点
Element bookstore = document.createElement("bookstore");
//根结点中添加子结点 创建子节点book
Element book=document.createElement("book");
//向book节点下添加子结点
Element name=document.createElement("name");
book.appendChild(name);
//为name节点添加文本
name.setTextContent("java编程思想");
//为book节点创建属性
book.setAttribute("id","1");
//book节点加入到bookstore
bookstore.appendChild(book);
//将bookstore( 已包含了book )节点添加到document中
document.appendChild(bookstore);
//创建TransformerFactory对象
TransformerFactory tff = TransformerFactory.newInstance();
try {
//创建Transformer对象
Transformer tf = tff.newTransformer();
//使用setOutputProperty()方法进行文本换行
tf.setOutputProperty(OutputKeys.INDENT, "yes");
//Transformer对象的transformer()方法转换 使用StreamResult对象指定需要生成的XML文件
tf.transform(new DOMSource(document), new StreamResult(new File("books1.xml")));
} catch (TransformerConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new DOMCreateXML().createXML();
}
}