版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huiting_liu/article/details/68490475
一、技术要点
1.载入文档
XML文档只有载入内存才能被操作,对于一个XML文档,载入内存之后成为Document对象。载入过程如下:
(1)实例化 javax.xml.parsers.DocumentBuilderFactory,并通过DocumentBuilderFactory实例化 javax.xml.parsers.DocumentBuilder。
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
(2)通过DocumentBuilder的parse(String)方法传入文件路径,载入文档,并返回Document对象。
Document doc= db.parse(books.xml);
(3)使用Document对象。
2.保存文档
将文档保存在硬盘上,也是将该Document对象写入硬盘。保存过程如下。
(1)实例化javax.xml.transform.TransformerFactory,并通过TransformerFactory实例化javax.xml.transform.Transformer,为了支持中文,通常还设置Transformer的encoding。
TransformerFactory tff=TransformerFactory.newInstance();
Transformer tf= tff.newTransformer();
tf.setOutputProperty("encoding","utf-8");
(2)通过javax.xml.transform.dom.将Document对象封装为DOM源,通过javax.xml.transform.stream.StreamResult包装java.io.File对象,确定输出目标。
DOMSource source = new DOMSource(doc);
File file = new File("newFile.xml");
StreamResult result = new StreamResult(file);
(3)利用Transformer 的transform方法将源输出到目标。
tf.transform(source,result);
示例程序:
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.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 Test01 {
public static void main(String[] args) {
//创建一个DocumentBuilderFactory的对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//创建一个DocumentBuilder的对象
DocumentBuilder db = null;
try {
db = dbf.newDocumentBuilder();
}
catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Document document= db.newDocument();
document.setXmlStandalone(true);
Element bookstore= document.createElement("bookstore");
//向bookstores根节点中添加子节点book
Element book=document.createElement("book");
/*
* 为book节点添加子节点name
*/
Element name = document.createElement("name");
name.setTextContent("小王子");//设置name节点的节点值
book.appendChild(name);//将子节点name添加到book节点中
/*
* 为book节点添加子节点year
*/
Element year = document.createElement("year");
year.setTextContent("2012");
book.appendChild(year);
/*
* 为book节点添加子节点author
*/
Element author = document.createElement("author");
author.setTextContent("马丁");
book.appendChild(author);
//向book节点中添加属性
book.setAttribute("id", "1");
//将book节点加到bookstore根节点中
bookstore.appendChild(book);
//将bookstore节点(已经包含了book节点)添加到dom树中
document.appendChild(bookstore);
/*
*
*/
//创建TransformerFactory对象
TransformerFactory tff=TransformerFactory.newInstance();
try {
//创建Transformer对象
Transformer tf= tff.newTransformer();
tf.setOutputProperty(OutputKeys.INDENT, "yes");//使属性换行
tf.transform(new DOMSource(document),new StreamResult(new File("book1.xml")));
}
catch (TransformerException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}