java读取xml和xml写入数据

package cn.itcast.usermng.dao;

import java.io.PrintWriter;
import java.io.Writer;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import cn.itcast.usermng.domain.User;

/**
 * 持久层(数据层)
 * 
 * 用来访问xml文件!
 * @author cxf
 * 
 * 某一实现类!
 */
public class UserDaoImpl implements UserDao {
	/**
	 * 插入对象到xml中
	 * @param form
	 */
	public void addUser(User form) {
		/*
		 * 1. 得到Document
		 * 2. 得到root元素
		 * 3. 要把User对象转换成Element元素
		 * 4. 把user元素插入到root元素中
		 * 5. 回写document
		 */
		try {
			/*
			 * 1. 得到Docuembnt
			 */
			// 创建解析器
			SAXReader reader = new SAXReader();
			// 调用读方法,得到Document
			Document doc = reader.read("F:/users.xml");
			
			/*
			 * 2. 得到根元素
			 */
			Element root = doc.getRootElement();
			/*
			 * 3. 完成添加元素,并返回添加的元素!
			 * 向root中添加一个名为user的元素!并返回这个元素
			 */
			Element userElement = root.addElement("user");
			// 设置userElement的属性!
			userElement.addAttribute("username", form.getUsername());
			userElement.addAttribute("password", form.getPassword());
			userElement.addAttribute("age", String.valueOf(form.getAge()));
			userElement.addAttribute("gender", form.getGender());
			
			/*
			 * 回写
			 * 注意:创建的users.xml需要使用工具修改成UTF-8编码!
			 * Editplus:标记列--> 重新载入为 --> UTF-8
			 */
			
			// 创建目标输出流,它需要与xml文件绑定
			Writer out = new PrintWriter("F:/users.xml", "UTF-8");
			// 创建格式化器
			OutputFormat format = new OutputFormat("\t", true);
			format.setTrimText(true);//先干掉原来的空白(\t和换行和空格)!
			
			// 创建XMLWrtier
			XMLWriter writer = new XMLWriter(out, format);
			
			// 调用它的写方法,把document对象写到out流中。
			writer.write(doc);
			
			// 关闭流
			out.close();
			writer.close();
			
		} catch(Exception e) {
			// 把编译异常转换成运行异常!
			throw new RuntimeException(e);
		}
	}
	
	/**
	 * 按用户名进行查询
	 * @param username
	 * @return
	 */
	public User findByUsername(String username) {
		/*
		 * 1. 得到Docuemnt
		 * 2. 给出xpath表达式
		 * 3. 调用docuemnt的方法进行xpath查询,得到Element
		 * 4. 把Element转换成User对象,返回!
		 */
		try {
			/*
			 * 1. 得到Docuembnt
			 */
			// 创建解析器
			SAXReader reader = new SAXReader();
			// 调用读方法,得到Document
			Document doc = reader.read("F:/users.xml");
			
			/*
			 * 2. 准备xpath
			 *  //开头表示没有深的限制,可以在文档查询子元素、子元素的子元素!
			 *  []中放的叫谓语,其实就是查询条件
			 *  @username表示username属性,限定其必须等于方法参数username
			 */
			String xpath = "//user[@username='" + username + "']";
			/*
			 * 3. 调用document方法完成查询
			 */
			Element userEle = (Element)doc.selectSingleNode(xpath);
			if(userEle == null) {
				return null;
			}
			/*
			 * 4. 把元素转换成User类的对象,然后返回
			 */
			User user = new User();
			// 获取元素的username属性值,赋给对象的username属性
			user.setUsername(userEle.attributeValue("username"));
			user.setPassword(userEle.attributeValue("password"));
			user.setAge(Integer.parseInt(userEle.attributeValue("age")));
			user.setGender(userEle.attributeValue("gender"));
			
			return user;
		} catch(Exception e) {
			throw new RuntimeException(e);
		}
	}
}

你可能感兴趣的:(java,xml)