dom读写xml

如果你没有读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();
  }
 }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值