dom解析xml小例子

初次学习用dom操作xml文件,有很多不足之处,牛人多给点建议,练习时我没对中文做乱码处理,也没做验证哦!O(∩_∩)O~

实体类:User

public class User {
 private String name;
 private String pwd;
 private String email;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getPwd() {
  return pwd;
 }
 public void setPwd(String pwd) {
  this.pwd = pwd;
 }
 public String getEmail() {
  return email;
 }
 public void setEmail(String email) {
  this.email = email;
 }
}

数据访问层接口:UserDao

public interface UserDao {
 boolean login(String name, String pwd);
 void insertUser(User user);
 List<User> selectUser();
 void updateUser(User user);
 boolean deleteUser(String name);
 public User findByName(String name);
}

接口实现类:UserDaoImpl

 

public class UserDaoImpl implements UserDao {
 private static final String PATH="xml文件路径";

 private void build(Document dom) {
  try {
   //定义转换器
   Transformer f = TransformerFactory.newInstance().newTransformer();
   //设置输出的编码格式
   f.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
   //构建dom源
   DOMSource source = new DOMSource(dom);
   //指定文件存放的目标路劲
   StreamResult sr = new StreamResult(new File(PATH));
   //执行转换操作
   f.transform(source, sr);
  } catch (Exception e) {
   e.printStackTrace();
  }

 }
 //登陆
 public boolean login(String name, String pwd) {
  boolean flag = false;
  try {
   //根据以有的xml文件创建Document对象
   Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File(PATH));
   //获取user节点下的子节点
   NodeList list = dom.getElementsByTagName("user");
   //遍历list,数据匹配退出
   for(int i = 0; i<list.getLength(); i++) {
    Element el = (Element)list.item(i);
    if(name.equals(el.getAttribute("name")) && pwd.equals(el.getAttribute("pwd"))) {
     flag = true;
     break;
    }
   }
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return flag;

 }
 //添加操作
 public void insertUser(User user) {
  try {
   //创建全新的Document对象
   Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
   //创建根节点users
   Element el = dom.createElement("users");
   //将根节点添加到dom中
   dom.appendChild(el);
   //创建子节点
   Element e2 = dom.createElement("user");
   //将子节点添加到根节点中
   el.appendChild(e2);
   //取得xml文件中现有的信息
   List<User> users = this.selectUser();
   for(int i = 0; i < users.size(); i++){
    //创建节点user
    Element el3 = dom.createElement("user");
    User us =users.get(i);
    //设置节点的属性(name,pwd,email)
    el3.setAttribute("name", us.getName());
    el3.setAttribute("pwd", us.getPwd());
    el3.setAttribute("email", us.getEmail());
    //添加到根节点中
    el.appendChild(el3);
   }
   e2.setAttribute("name", user.getName());
   e2.setAttribute("pwd", user.getPwd());
   e2.setAttribute("email", user.getEmail());

   build(dom);

  } catch (ParserConfigurationException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

 }
 //查询操作
 public List<User> selectUser() {
  List<User> userList = new ArrayList<User>();
  try {
   //根据已有的xml文件创建dom
   Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File(PATH));
   //获取所有user节点下的子节点
   NodeList list = dom.getElementsByTagName("user");
   for(int i = 0;i <list.getLength();i++){
    User user =new User();
    Element element = (Element)list.item(i);
    user.setName(element.getAttribute("name"));
    user.setPwd(element.getAttribute("pwd"));
    user.setEmail(element.getAttribute("email"));
    userList.add(user);
   }
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return userList;
 }
 //修改操作
 public void updateUser(User user) {
  try {
   //根据以有的xml文件创建dom
   Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File(PATH));
   //获取user节点下的子节点
   NodeList list = dom.getElementsByTagName("user");
   //遍历list
   for(int i = 0;i < list.getLength();i++) {
    Element el = (Element)list.item(i);
    //根据name属性去修改
    if(user.getName().equals(el.getAttribute("name"))) {
     el.setAttribute("pwd", user.getPwd());
     el.setAttribute("email", user.getEmail());
     build(dom);
    }
   }
  } catch (SAXException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (ParserConfigurationException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 //删除操作
 public boolean deleteUser(String name) {
  try {
   //根据以有xml文件创建domcumet对象
   Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File(PATH));
   //获取user节点下的子节点
   NodeList list = dom.getElementsByTagName("user");
   //遍历list
   for(int i=0;i<list.getLength();i++) {
    Element el = (Element)list.item(i);
    if(name.equals(el.getAttribute("name"))) {
     el.getParentNode().removeChild(el);
     build(dom);
     return true;
    }
   }
  } catch (Exception e) {
   // TODO: handle exception
  }
  return false;
 }

 //根据name查找
 public User findByName(String name) {
  User user = new User();
  try {
   //根据以后的xml文件创建document对象
   Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File(PATH));
   //获取user节点下的子节点集合
   NodeList list = dom.getElementsByTagName("user");
   for(int i=0;i<list.getLength();i++) {
    Element el = (Element)list.item(i);
    if(name.equals(el.getAttribute("name"))) {
     user.setName(el.getAttribute("name"));
     user.setPwd(el.getAttribute("pwd"));
     user.setEmail(el.getAttribute("email"));
     break;
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  return user;
 }
}

业务逻辑层接口:UserService

 boolean login(String name, String pwd);
 void insertUser(User user);
 List<User> selectUser();
 void updateUser(User user);
 boolean deleteUser(String name);
 public User findByName(String name);

接口实现类:UserServiceImpl

 

public class UserServiceImpl implements UserService {
 
 UserDao dao = new UserDaoImpl();

 public boolean login(String name, String pwd) {
  return dao.login(name, pwd);
 }

 public void insertUser(User user) {
  dao.insertUser(user);
 }

 public List<User> selectUser() {
  return dao.selectUser();
 }

 public void updateUser(User user) {
  dao.updateUser(user);
 }

 public boolean deleteUser(String name) {
  return dao.deleteUser(name);
 }

 public User findByName(String name) {
  return dao.findByName(name);
 }
}

控制层:UserAction

 

public class UserAction extends ActionSupport{
 
    private User user;
   
 public User getUser() {
  return user;
 }
 
 public void setUser(User user) {
  this.user = user;
 }
 
 UserService userService = new UserServiceImpl();
 public String selectUser(){
  HttpServletRequest request = ServletActionContext.getRequest();
  List<User> users = new ArrayList<User>();
  users = userService.selectUser();
  request.setAttribute("USER", users);
  return "select";
 }
 
 /**
  * 登陆
  * @return
  */
 public String login(){
  if(user.getName() != null && user.getPwd() != null) {
   boolean flag = userService.login(user.getName(), user.getPwd());
   if(flag) {
    return SUCCESS;
   }
  }
  return ERROR;
 }
 
 /**
  * 修改
  * @return
  */
 public String update(){
  userService.updateUser(user);
  return "update";
 }
 
 /**
  * 编辑
  * @return
  */
 public String edit(){
  HttpServletRequest request = ServletActionContext.getRequest();
  String name = request.getParameter("uName");
  if(name != null) {
   User u = userService.findByName(name);
   request.setAttribute("USER", u);
  }
  return "edit";
 }
 
 /**
  * 删除
  * @return
  */
 public String delete(){
  HttpServletRequest request = ServletActionContext.getRequest();
  String name = request.getParameter("uName");
  boolean flag = userService.deleteUser(name);
  System.out.println(flag);
  return SUCCESS;
 }
 
    /**
     * 添加
     * @return
     */
 public String insert(){
  userService.insertUser(user);
  return "insert";
 }
}

struts.xml配置(本人用的的struts2):

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
   <package name="file" extends="struts-default">
     <action name="list" class="com.jun.action.UserAction" method="selectUser">
        <result name="select">/list.jsp</result>
     </action>
     <action name="login" class="com.jun.action.UserAction" method="login">
        <result name="success" type="redirectAction">/list.action</result>
        <result name="error">/login.jsp</result>
     </action>
     <action name="insert" class="com.jun.action.UserAction" method="insert">
        <result name="insert" type="redirectAction">/list.action</result>
     </action>
     <action name="delete" class="com.jun.action.UserAction" method="delete">
        <result type="redirect">/list.action</result>  
     </action>
     <action name="update" class="com.jun.action.UserAction" method="update">
        <result name="update" type="redirectAction">/list.action</result>  
     </action>
     <action name="edit" class="com.jun.action.UserAction" method="edit">
        <result name="edit">/update.jsp</result>  
     </action>
   </package>
</struts>

 

web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
 xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
 
  <filter>
   <filter-name>struts2</filter-name>
   <filter-class>
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
   </filter-class>
  </filter>
  <filter-mapping>
   <filter-name>struts2</filter-name>
   <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

四个页面:login.jsp  list.jsp insert.jsp,update.jsp

login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'login.jsp' starting page</title>
   
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
  </head>
  <body>
   <a href="list.action">首页</a>|<a href="insert.jsp">注册</a>
    <form action="login.action" method="post">
    <table>
    <tr>
       <td> 用户名:</td><td><input name="user.name" type="text"></td>
    </tr>
    <tr>
       <td> 密码:</td><td><input type="password" name="user.pwd"></td>
    </tr>
    <tr>
       <td colspan="2" align="center"><input type="submit" value="登录"></td>
    </tr>
       </table> 
    </form>
  </body>
</html>

list.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'list.jsp' starting page</title>
   
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->

  </head>
 
  <body >
  <a href="insert.jsp">注册</a>
   <table border="1">
   <tr>
     <td align="center" colspan="6"><font size="+3">用户列表</font></td>
   </tr>
     <tr>
       <td>序号</td><td>用户名</td><td>密码</td><td>邮箱</td><td>删除</td><td>编辑</td>
     </tr>
     <c:forEach items="${USER}" var="u" varStatus="temp">
       <tr>
        <td>${temp.index+1}</td><td>${u.name }</td><td>${u.pwd }</td><td>${u.email}</td><td><a href="delete.action?uName=${u.name}">删除</a></td><td><a href="edit.action?uName=${u.name }">编辑</a></td>
       </tr>
   </c:forEach>
   </table>
  </body>
</html>

insert.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
 String path = request.getContextPath();
 String basePath = request.getScheme() + "://"
   + request.getServerName() + ":" + request.getServerPort()
   + path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <base href="<%=basePath%>">

  <title>My JSP 'register.jsp' starting page</title>

  <meta http-equiv="pragma" content="no-cache">
  <meta http-equiv="cache-control" content="no-cache">
  <meta http-equiv="expires" content="0">
  <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  <meta http-equiv="description" content="This is my page">
  <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->

 </head>

 <body>
  <a href="list.action">首页</a>
  <form action="insert.action" method="post">
   <table>
    <tr>
     <td>
      用户名:
     </td>
     <td>
      <input name="user.name" type="text">
     </td>
    </tr>
    <tr>
     <td>
      密码:
     </td>
     <td>
      <input type="password" name="user.pwd">
     </td>
    </tr>
    <tr>
     <td>
      邮箱:
     </td>
     <td>
      <input type="text" name="user.email">
     </td>
    </tr>
    <tr>
     <td colspan="2" align="center">
      <input type="submit" value="提交">
     </td>
    </tr>
   </table>
  </form>
 </body>
</html>

update.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'update.jsp' starting page</title>
   
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
  </head>
  <body>
    <a href="list.action">首页</a>
    <h2>更新操作</h2>
   <form action="update.action" method="post">
    <table>
    <c:set value="${USER}" var="user"></c:set>
    <tr>
       <td> 用户名:</td><td><input readonly="readonly" name="user.name" value="${user.name}" type="text"></td>
    </tr>
    <tr>
       <td> 密码:</td><td><input type="password" value="${user.pwd }"  name="user.pwd"></td>
    </tr>
    <tr>
       <td> 邮箱:</td><td><input type="text" value="${user.email }" name="user.email"></td>
    </tr>
    <tr>
       <td colspan="2" align="center"><input type="submit" value="保存"></td>
    </tr>
       </table> 
      
    </form>
  </body>
</html>

 

本人学习所用的user.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<users>
<user email=aaa@sina.com name="bbb" pwd="aaaaaa"/>
<user email=bbb@sina.com name="ccc" pwd="aaaaaa"/>
</users>


 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值