DOM在Java中对xml文件的编辑

1.这是我们所要用的xml文件,里面存着了用户member的所有资料。。
当然还通过members.dtd来规范member的格式

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE members SYSTEM "members.dtd">
<members><member gender="male"><username>saoo</username><password>saoo</password><realname>Huang Jinxiang</realname><birth>17/8/1982</birth><contact>94811430</contact><email>huang_jinxiang@yahoo.com</email><address>Lonpang Rd BLK 178 #17-28</address><zipcode>670178</zipcode></member></members>

2.建议一个相对应的Member的JavaBean:

/*
 * Created on 2004-7-10
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * @author Huang Jinxiang
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class Member {
 private String username;
 private String password;
 private String realname;
 private String birth;
 private String contact;
 private String email;
 private String address;
 private String gender;
 private String zipcode;

 public String getAddress() {
  return address;
 }
 public void setAddress(String address) {
  this.address = address;
 }
 public String getBirth() {
  return birth;
 }
 public void setBirth(String birth) {
  this.birth = birth;
 }
 public String getContact() {
  return contact;
 }
 public void setContact(String contact) {
  this.contact = contact;
 }
 public String getEmail() {
  return email;
 }
 public void setEmail(String email) {
  this.email = email;
 }
 public String getGender() {
  return gender;
 }
 public void setGender(String gender) {
  this.gender = gender;
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
 public String getRealname() {
  return realname;
 }
 public void setRealname(String realname) {
  this.realname = realname;
 }
 public String getUsername() {
  return username;
 }
 public void setUsername(String username) {
  this.username = username;
 }
 public String getZipcode() {
  return zipcode;
 }
 public void setZipcode(String zipcode) {
  this.zipcode = zipcode;
 }
}
因为xml中存的都是以String的格式,所以我把全部的Member的属性都用String来表示,之后,用户可以通过Integer.parseInt()之类的helper来改变其类型。。

3. 用Dom进行解析:

/*
 * Created on 2004-7-10
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

import java.io.File;

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.Node;

/**
 * @author Huang Jinxiang
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class MemberImp {

//这一个方法是对Member的资料进行编辑,然后保存
//先是找到相对应的Member的资料,提取出来放到相对应的Member Bean中
//,然后从xml文件里删除这一个用户的资料,
//接着改变提取出来MemberBean的属性值
//最后写入到members.xml中
//其中String str是指的members.xml的对就的路径(既members.xml的位置)
 public void updateMember(Member member, String str) {
  try {
   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
   DocumentBuilder builder = factory.newDocumentBuilder();
   
   Document document = builder.parse(str);
   Element root = document.getDocumentElement();
   
   int i;
   for(i =0; i < root.getChildNodes().getLength(); i++) {
    Node curNode = root.getChildNodes().item(i);
    if(curNode.getFirstChild().getFirstChild().getNodeValue().equals(member.getUsername()))
    {
     root.removeChild(curNode);
     TransformerFactory tFactory =
         TransformerFactory.newInstance();
     Transformer transformer = tFactory.newTransformer();

     DOMSource source = new DOMSource(document);
     StreamResult result = new StreamResult(str);
     String systemValue = (new
          File(document.getDoctype().getSystemId())).getName();
     transformer.setOutputProperty(
         OutputKeys.DOCTYPE_SYSTEM, systemValue
        );
     transformer.transform(source, result);
     writeMember(member, str);
    }
   }
  }
  catch(Exception e) {
   e.printStackTrace();
  }
 }

//这个方法是用来取得相对就username的全部member的资料
 public Member getMember(String username, String str) {
  Member member = new Member();
  Document document;
  try {
   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
   DocumentBuilder builder = factory.newDocumentBuilder();
   
   document = builder.parse(str);
   Element root = document.getDocumentElement();
   
   int i;
   for(i =0; i < root.getChildNodes().getLength(); i++) {
   Node curNode = root.getChildNodes().item(i);
   
   if(curNode.getFirstChild().getFirstChild().getNodeValue().equals(username)) {
    member.setGender(curNode.getAttributes().item(0).getFirstChild().getNodeValue());
    member.setUsername(curNode.getChildNodes().item(0).getFirstChild().getNodeValue());
    member.setPassword(curNode.getChildNodes().item(1).getFirstChild().getNodeValue());
    member.setRealname(curNode.getChildNodes().item(2).getFirstChild().getNodeValue());
    member.setBirth(curNode.getChildNodes().item(3).getFirstChild().getNodeValue());
    member.setContact(curNode.getChildNodes().item(4).getFirstChild().getNodeValue());
    member.setEmail(curNode.getChildNodes().item(5).getFirstChild().getNodeValue());
    member.setAddress(curNode.getChildNodes().item(6).getFirstChild().getNodeValue());
    member.setZipcode(curNode.getChildNodes().item(7).getFirstChild().getNodeValue());
    }
   }
  }
  catch (Exception e) { e.printStackTrace();}
  return member;
 }

//这是将新生成的Member Bean写到members.xml中
//还要注意不要忘记DTD所XML中的SystemId
 public void writeMember(Member member, String str) {
  try {
   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
   factory.setValidating(true);
   DocumentBuilder builder = factory.newDocumentBuilder();
   Document document = builder.parse(str);
   Element mem = document.createElement("member");
   mem.setAttribute("gender", member.getGender());

   Element username = document.createElement("username");
   username.appendChild(document.createTextNode(member.getUsername()));
   mem.appendChild(username);

   Element password = document.createElement("password");
   password.appendChild(document.createTextNode(member.getPassword()));
   mem.appendChild(password);
   
   Element realname = document.createElement("realname");
   realname.appendChild(document.createTextNode(member.getRealname()));
   mem.appendChild(realname);
   
   Element birth = document.createElement("birth");
   birth.appendChild(document.createTextNode(member.getBirth()));
   mem.appendChild(birth);

   Element con = document.createElement("contact");
   con.appendChild(document.createTextNode(member.getContact()));
   mem.appendChild(con);
   
   Element email = document.createElement("email");
   email.appendChild(document.createTextNode(member.getEmail()));
   mem.appendChild(email);
   
   Element add = document.createElement("address");
   add.appendChild(document.createTextNode(member.getAddress()));
   mem.appendChild(add);
   
   Element zipcode = document.createElement("zipcode");
   zipcode.appendChild(document.createTextNode(member.getZipcode()));
   mem.appendChild(zipcode);

   Element root = document.getDocumentElement();
   root.appendChild(mem);

   TransformerFactory tFactory =
       TransformerFactory.newInstance();
   Transformer transformer = tFactory.newTransformer();

   DOMSource source = new DOMSource(document);
   StreamResult result = new StreamResult(str);
   String systemValue = (new
        File(document.getDoctype().getSystemId())).getName();
   transformer.setOutputProperty(
       OutputKeys.DOCTYPE_SYSTEM, systemValue
      );
   transformer.transform(source, result);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值