如果你没有读dom读写xml相关回顾,请先阅读!
******写入xml******
package com;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
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;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;
public class WriteXml {
private Document doc=null;
private Transformer tf=null;
private String filePath=null;
private List lists=null;
/**
* 构造方法
* @param file 文件路径
* @throws Exception
*/
public WriteXml(String file)throws Exception{//这里注意异常
//获取doc创建者工厂的实例
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
//获取doc创建者实例
DocumentBuilder db=dbf.newDocumentBuilder();
//与读xml不同,这里是直接通过doc创建者得到doc
doc=db.newDocument();
//获取工厂对象
TransformerFactory tff=TransformerFactory.newInstance();
//此实例处理来自不同源的 XML,并将转换输出写入各种接收器。
tf=tff.newTransformer();
//文件路径
this.filePath=file;
}
/**
* 创建xml
* @throws Exception
*/
public void createXml()throws Exception{
UserManagerDAO dao=new UserManagerDAO();
lists=dao.searchUser();
//下面是建立XML文档内容的过程,先建立根元素”class”
Element root=doc.createElement("class");
//把根元素加到doc中,这个非常重要,也常常出现忘写的情况
doc.appendChild(root);
//遍历集合,从数据库中得到的
for (int i = 0; i < lists.size(); i++) {
UserInfoBean user=(UserInfoBean)lists.get(i);
//创建一个student结点
Element student=doc.createElement("student");
//给结点添加一个名称为id的属性,值为"00"+i
student.setAttribute("id", "00"+i);
//创建name结点
Element name=doc.createElement("name");
//为结点添加内容
name.setTextContent(user.getLoginName());
//同上
Element age=doc.createElement("age");
age.setTextContent(Integer.toString(user.getUserId()));
Element sex=doc.createElement("sex");
sex.setTextContent(user.getLoginPass());
//与上面添加内容是一样的效果
//Text txtSex=doc.createTextNode(user.getLoginPass());
//sex.appendChild(txtSex);
//以下的操作也很重要,常常容易忘记,请注意
student.appendChild(name);
student.appendChild(age);
student.appendChild(sex);
root.appendChild(student);
}
}
/**
* 存入文件
* @throws Exception
*/
public void saveAsFile()throws Exception{
//从一个文档对象中得到一个dom模型的数据源
DOMSource dom=new DOMSource(doc);
//从一个路径中创建一个文件对象
File file=new File(filePath);
//充当转换结果的持有者,可以为 XML、纯文本、HTML 或某些其他格式的标记。
StreamResult sr=new StreamResult(file);
//encoding 指定了首选的字符编码,Transformer 应使用此编码将字符序列编码作为字节序列进行编码。
tf.setOutputProperty(OutputKeys.ENCODING, "utf-8");
//indent 指定了当输出结果树时,Transformer 是否可以添加额外的空白
tf.setOutputProperty(OutputKeys.INDENT, "yes");
/*关键的一步, 调用Transformer对象 (XSLT引擎)的transform()方法,该方法的第一
参数是Source对象,第二个参数是Result对象。可将dom数据源输出到结果树sr对象中
,这里用两个参数的子类*/
tf.transform(dom, sr);//这里存在异常,我们还是抛出
}
}
******读取xml******
package com;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import com.UserInfoBean;
public class ReadXml {
private Document doc = null;
private List lists = new ArrayList();
private List attrs = new ArrayList();
/**
* 构造方法,实例化后得到一个document文档对象
* @param fileName 文件路径
* @throws Exception
*/
public ReadXml(String filePath) throws Exception {//这里注意异常
//获取doc创建者工厂的实例
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//获取doc创建者实例
DocumentBuilder db = dbf.newDocumentBuilder();
//与写xml不同,这里是通过doc创建者从文件路径中得到doc
doc = db.parse(filePath);
}
/**
* 读取xml
*
*/
public void readXmlFile() {
//获取根元素
Element root = doc.getDocumentElement();
//根据元素名称获取节点集合
NodeList stulists = root.getElementsByTagName("student");
//遍历集合
for (int i = 0; i < stulists.getLength(); i++) {
UserInfoBean user = new UserInfoBean();
//获得第i个节点的元素
Element student = (Element) stulists.item(i);
//把节点上的属性取出放入类中的arrts集合中
attrs.add(student.getAttribute("id"));
//根据元素名称获取节点集合
NodeList names = student.getElementsByTagName("name");
//因为在这个元素是最后一层了,可以直接取names.item(0)这个Node节点,
//通过getFirstChild().getNodeValue()方法取得内容
user.setLoginName(names.item(0).getFirstChild().getNodeValue());
NodeList ages = student.getElementsByTagName("age");
user.setUserId(Integer.parseInt(ages.item(0).getFirstChild().getNodeValue()));
NodeList sexs = student.getElementsByTagName("sex");
//这种写法同样可得到内容,而且相对简单些
user.setLoginPass(sexs.item(0).getTextContent());
lists.add(user);
}
}
/**
* 打印到控制台,进行验证数据
*
*/
public void printxml() {
for (int i = 0; i < lists.size(); i++) {
UserInfoBean u = (UserInfoBean)lists.get(i);
System.out.println("<<<student>>> id="+attrs.get(i).toString());
System.out.println("name " + u.getLoginName());
System.out.println("age " + u.getUserId());
System.out.println("sex " + u.getLoginPass());
System.out.println();
}
}
}
****test测试******
package com;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
try {
WriteXml x=new WriteXml("f://20090604.xml");
x.createXml();
x.saveAsFile();
} catch (Exception e) {
e.printStackTrace();
}
try {
ReadXml r=new ReadXml("f://20090604.xml");
r.readXmlFile();
r.printxml();
} catch (Exception e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
}