java生成XML(二)

12 篇文章 0 订阅

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、付费专栏及课程。

余额充值