1.创建XML,添加内容,然后写入到本地。
采用DOM(JAXP Crimson解析器)处理,Java提供了四种处理方法,这里选取其一
//整体思路,
//创建文档构建器工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//创建一个文档构建器,此处需要try,catch处理一下
DocumentBuilder db = factory.newDocumentBuilder();
// 创建xmldoc文档对象,用来创建节点。
Document xmldoc = db.newDocument();
// 创建books根节点
books = xmldoc.createElement("books");
// 将books根节点添加到xmldoc上
xmldoc.appendChild(books);
//然后就是在根节点下添加新的节点,先创建新节点,给新节点添加文本属性,或者创建文本节点,将文本节点添加到新节点上。
theBook = xmldoc.createElement("book");
// --- 另外还想加一个属性id,值为B01 ----
theBook.setAttribute("id", "B01");
theElem = xmldoc.createElement("name");
//给新节点添加文本属性
theElem.setTextContent("哈里波特");
//创建文本节点,将文本节点添加到新节点上。
//theElem.appendChild(xmldoc.createTextNode("哈里波特2"));
//theBook 下添加theElem节点
theBook.appendChild(theElem);
//books根节点下添加theBook节点
books.appendChild(theBook);
可以将每次创建新节点,添加到父节点上的步骤封装起来,便于代码复用
// 添加子节点到该节点上(父节点对象,子节点名称,子节点文本)
public void addChildElement(Element element, String child_ele_name, String text) {
Document doc = element.getOwnerDocument();
Element sub_element = createLeafElement(doc, child_ele_name, text);
element.appendChild(sub_element);
}
// 创建叶节点(无子节点的节点)(文档对象,节点名,节点文本)
public Element createLeafElement(Document doc, String eleName, String text) {
// 创建节点需要doc对象
Element ele = doc.createElement(eleName);
if (text != null) {
// 创建文本节点,并添加到叶子节点上。
ele.appendChild(doc.createTextNode(text));
}
return ele;
}
下面看一个具体实例,运行main方法即可。
xml格式
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<books>
<book id="B01">
<name>神雕侠侣</name>
<price>10</price>
<memo>徒弟和师傅外加一只雕的故事。</memo>
</book>
</books>
package com.leo.xml;
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 NewXMl {
public static void main(String[] args) {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder db = null;
try {
db = factory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
// 声明3个变量,可以复用。
Element books = null, Book = null, Elem = null;
// 创建xmldoc对象,用来创建节点。
Document xmldoc = db.newDocument();
// 创建books节点
books = xmldoc.createElement("books");
// 将books节点添加到xmldoc上
xmldoc.appendChild(books);
Book = xmldoc.createElement("book");
// --- 另外还想加一个属性id,值为B01 ----
Book.setAttribute("id", "B01");
Elem = xmldoc.createElement("name");
Elem.setTextContent("笑傲江湖");
//Elem.appendChild(xmldoc.createTextNode("天龙八部"));
Book.appendChild(Elem);
Elem = xmldoc.createElement("price");
Elem.setTextContent("20");
Book.appendChild(Elem);
Elem = xmldoc.createElement("memo");
Elem.setTextContent("令狐冲与东方不败的爱恨情仇。");
Book.appendChild(Elem);
books.appendChild(Book);
// ** 将document中的内容写入文件中 *//*
// 创建TransformerFactory对象
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer;
try {
// 创建transformer 对象
transformer = tFactory.newTransformer();
// ** 设置xml编码 格式**
transformer.setOutputProperty(OutputKeys.ENCODING, "GB2312");
DOMSource source = new DOMSource(xmldoc);
//设置本地保存路径
StreamResult result = new StreamResult(new File("D:/123.xml"));
transformer.transform(source, result);
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
}
}
最后,可以了解一下,Java读取XML数据,采用Dom方式