一个简单的DOM4J的例子

这是我写的一个DOM4J的小例子,基本实现了增加,删除,修改等功能.希望能帮助初学者.里面的代码基本每一句都有解释.如果不清楚,G一下应该也知道,如果不清楚.可以留言给我.

 

ps:希望牛人不要丢瓶.

我是用STRUTS 1 做的,本来想用javabean,但是太麻烦了.里面可能有些错别字,呵呵。。希望读者理解.废话不多说.下面是代码.

分三个部分.

我的XML文件是放在根目录下的/xml下面的:

 

----这是我的wep.XML:

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>3</param-value>
    </init-param>
    <init-param>
      <param-name>detail</param-name>
      <param-value>3</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 这是我的struts配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
  <form-beans>
     <form-bean name="Plecar" type="com.Domj4.Plecar"></form-bean>
  </form-beans>
  <action-mappings>
      <action path="/PlecarToXml"
      		  type="com.Domj4.PlecarToXml"
      		  scope="request"
      		  name="Plecar"
      >
      <forward name="write" path="/PlecarQueryXml.do"></forward>
      </action>
      <action path="/PlecarQueryXml"
      		  type="com.Domj4.PlecarQueryXml"
      		  scope="request"
      		  name="Plecar"
      >
      <forward name="query" path="/ShowThePlecar.jsp"></forward>
  </action>
        <action path="/PlecarModifyQueryXml"
      		  type="com.Domj4.PlecarModifyQueryXml"
      		  scope="request"
      		  name="Plecar"
      >
      <forward name="modify" path="/Modify.jsp"></forward>
  </action>
        <action path="/PlecarModifyXml"
      		  type="com.Domj4.PlecarModifyXml"
      		  scope="request"
      		  name="Plecar"
      >
      <forward name="index" path="/PlecarQueryXml.do"></forward>
  </action>
          <action path="/PlecarDeleteXml"
      		  type="com.Domj4.PlecarDeleteXml"
      		  scope="request"
      		  name="Plecar"
      >
      <forward name="delete" path="/PlecarQueryXml.do"></forward>
  </action>
            <action path="/deleteAll"
      		  type="com.Domj4.deleteAll"
      		  scope="request"
      		  name="Plecar"
      >
      <forward name="ShowDeleteAllAfter" path="/PlecarQueryXml.do"></forward>
  </action>
  </action-mappings>
</struts-config>

 

下面是简单的页面:

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
  </head>
  
  <body>
  <div align="center" style="border: 4px dotted #ddd;">
    <form action="PlecarToXml.do" method="post">
        标题:<input name="title" type="text"><br/>
        内容:<textarea rows="20" cols="20" name="content"></textarea>
        <input type="submit" value="TO XML">
        <input type="reset" value="Reset">
    </form>
  </div>
  </body>
</html>

 Modify.jsp

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
   <center>
   <div style="width: 400px; height: 400px; border: 3px dashed #ddd;">
        <form action="PlecarModifyXml.do" method="post">
            <c:set var="form" value="${plecarContent}"/>
                 标题:<input name="title" type="text" value="${plecarContent.title}"/><br/>
       <input name="id" value="${plecarContent.id }" type="hidden"/><br/>
                 内容:<textarea name="content" cols="58" rows="8">${plecarContent.content }</textarea><br/>
       <input type="submit" value="保存"><input type="reset" value="重置"/>
       <a onclick="history.back(-1)">返回</a>
        </form>
   </div>
   </center>
</body>
</html>

 ShowThePlecar.jsp:

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="html" uri="http://jakarta.apache.org/struts/tags-html" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
<div style="border: 3px dotted #ddd; width: 420px; height: 400px;">
     [${description }]${createDate }
     <c:if test="${rssContent==null}">
           <tr></tr>
               <td height="27" colspan="3" align="center" bgcolor="#fff">暂时没有公告.</td>
           <tr></tr>
     </c:if>
     <br>
          <tr align="center" style="padding: 10px; width:140px" ><th height="27" width="140px">标题</th><th height="27" width="140px">修改</th><th height="27" width="140px">删除</th></tr>
          <br/>
     <c:forEach items="${rssContent}" var="form">

           <tr>
               <td height="27"  width="140" bgcolor="#fff">&nbsp;${form.title }</td>
               <td align="center" bgcolor="#fff" width="140" >
                   <html:link action="PlecarModifyQueryXml.do?id=${form.id}">修改</html:link>
               </td>
               <td height="27" bgcolor="#fff" width="140" ></td>
               <td align="center" bgcolor="#fff" width="140" >
                   <html:link action="PlecarDeleteXml.do?id=${form.id}">删除</html:link>
               </td>
           </tr>
     </c:forEach>
</div>
<div>
     <c:if test="${rssContent!=null}">
           <tr></tr>
               <td height="27" colspan="3" align="center" bgcolor="#fff"><a href="deleteAll.do">删除全部公告</a></td>
           <tr></tr>
     </c:if>
     <c:if test="${deleteAllOk!=null}"><script>alert("${deleteAllOk}");</script></c:if>
     <c:if test="${deleteSuccess!=null}"><script>alert("${deleteSuccess}");</script></c:if>
     <c:if test="${modifySuccess!=null}"><script>alert("${modifySuccess}");</script></c:if>
</div>
</body>
</html>
 

 

 

我先贴上actionForm:

1:这是个实例,因为只有一个,所有就没有单独放在一个包里了.

 

package com.Domj4;

import org.apache.struts.action.ActionForm;

public class Plecar extends ActionForm{
       private int id;
       private String pubDate;
       private String title;
       private String content;
	/**
	 * @return the id
	 */
	public int getId() {
		return id;
	}
	/**
	 * @param id the id to set
	 */
	public void setId(int id) {
		this.id = id;
	}
	/**
	 * @return the pubDate
	 */
	public String getPubDate() {
		return pubDate;
	}
	/**
	 * @param pubDate the pubDate to set
	 */
	public void setPubDate(String pubDate) {
		this.pubDate = pubDate;
	}
	/**
	 * @return the title
	 */
	public String getTitle() {
		return title;
	}
	/**
	 * @param title the title to set
	 */
	public void setTitle(String title) {
		this.title = title;
	}
	/**
	 * @return the content
	 */
	public String getContent() {
		return content;
	}
	/**
	 * @param content the content to set
	 */
	public void setContent(String content) {
		this.content = content;
	}
	
}

 

 2:这是创建和添加信息的action:

 

package com.Domj4;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class PlecarToXml extends Action {

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=GBK");
		String url = request.getRealPath("/xml/plecar.xml");//拿到文件的相对路径.
		File file = new File(url);
		
		String title = new String(request.getParameter("title").getBytes("iso-8859-1"),"gbk");//拿到公告的标题.
		String content = new String(request.getParameter("content").getBytes("iso-8859-1"),"gbk");//拿到公告的内容.
		System.out.println(content);
		
		Document document = null;
		Element plecar = null;
		DateFormat df = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分");//设置日期的格式.
		  if(!file.exists()) {//判断文件是不是存在.如果不存在就创建一个文件.
			  document = DocumentHelper.createDocument();//创建XML文档对象.
			  plecar = DocumentHelper.createElement("plecar");//创建普通节点.
			  
			  document.setRootElement(plecar);//将plecar设置为根节点.
			  plecar.addAttribute("version","2.0");//为根节点设置属性.
			  Element  description = plecar.addElement("description");//添加description子节点.
			           description.setText("公告栏");
			  Element  createTime = plecar.addElement("createTime");//添加createTime子节点.
			  		   createTime.setText("创建于:"+df.format(new Date()));
			  
		  }
		  else {//如果存在该文件.
			  SAXReader reader = new SAXReader();//实例化读取对象.
			  try {
				    document = reader.read(new File(url));//获取xml文件对应的xml文档对象.
				    plecar = document.getRootElement();//获取根节点.
			  }catch (DocumentException e) {
				System.out.println("xml文件读取失败!");
			}
			  
		  }
		/***********************添加公告信息*****************************/
		String id =String.valueOf(plecar.elements("info").size()+1); //获取当前公告的ID号.
		
		Element info = plecar.addElement("info");//添加info节点.
		        info.addAttribute("id", id);//为info添加属性.
		Element title_info = info.addElement("title");//添加tilte节点.
		        title_info.addText(title);//添加title内容.
		Element into_content = info.addElement("content");//添加into_content子节点.
				into_content.addCDATA(content);//添加内容.
	    Element pubDate = info.addElement("pubDate");//添加pubDate子节点.
	    		df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期的格式.
	    		pubDate.setText(df.format(new Date()));
	    		
	   /***********************保存文件*****************************/
	    //创建outputformat对象.
	    		OutputFormat format = OutputFormat.createPrettyPrint();//设置文件存入的格式.
	    		             format.setEncoding("GBK");//设置写入数据的格式编码.
	    		try {
	    			XMLWriter writer = new XMLWriter(new FileWriter(url),format);//拿到想要输入的文件,按照一定的格式写入.
	    			          writer.write(document);//向流写入数据.
	    			          writer.close();//关闭流.
	    		}catch (IOException e) {
					System.out.println("将数据写入文件出现错误.");
				}
	    return mapping.findForward("write");
	}

}









 

 

3:这是查询显示到页面的action:

 

 

package com.Domj4;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class PlecarQueryXml extends Action {

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		request.setCharacterEncoding("GBK");
		response.setContentType("text/html");
		String fileUrl = request.getRealPath("/xml/plecar.xml");//拿到文件的相对路径.
		File file = new File(fileUrl);
		
		Document document = null;//声明Document对象.
		Element plecar = null;//声明根节点对象.
		List list = null;//声明List对象.
		
		String description = "";//定义保存描述信息的变量.
		String createDate = "";//定义保存创建日期的变量.
    	
    	//Plecar plecar2 = null;//实例化对象,储存数据.
    	
		if(file.exists()) {//如果文件不存在.如果不存在就创建这个文件.
			SAXReader reader = new SAXReader();//拿到SAXReader对象.
			    try {
			    	document  = reader.read(new File(fileUrl));//拿到文件的XML文件.
			    	plecar = document.getRootElement();//拿到根节点.
			    	
			    	List lists = plecar.elements("info");//循环info公告里面的东西.
			    	
			    	description = plecar.element("description").getText();//拿到描述的信息.
			    	createDate = plecar.element("createTime").getText();//拿到创建日期.
			    	int id = 0;
			    	String title = "";//设置标题.
			    	String content = "";//设置内容.
			    	String pubDate = "";//设置发布日期.
			    	
			    	if(lists.size()>0) {
			    		list = new ArrayList();
			    	}
			    	for(int i=lists.size();i>0;i--) {
			    		
			    		Plecar plecar2 = new Plecar();//实例化对象.
			    		
			    		Element item = (Element)lists.get(i-1);//拿到内容info对象.
			    		
			    		id = Integer.parseInt(item.attribute("id").getValue());//拿到id的属性.
			    		
			    		if(item.element("title").getText()!=null) {//拿到info的标题.
			    			title = item.element("title").getText();
			    		}else {
			    			title = "暂时没有标题";
			    		}
			    		
			    		if(item.element("content").getText()!=null) {
			    			content = item.element("content").getText();//拿到info的内容.
			    		}else {
			    			content = "暂时没有内容";
			    		}
			    		if(item.element("pubDate").getText()!=null) {
			    			pubDate = item.element("pubDate").getText();//拿到发布日期.
			    		}
			    		
			    		plecar2.setId(id);
			    		plecar2.setTitle(title);
			    		plecar2.setContent(content);
			    		list.add(plecar2);
			    	}
			    }catch (Exception e) {
					  System.out.println("读取文件失败!1111");
					  e.printStackTrace();
				}
		}
		request.setAttribute("description", description);
		request.setAttribute("createDate", createDate);
		request.setAttribute("rssContent", list);
		
		return mapping.findForward("query");
	}

}













 

 

4:这个是修改时候所要查询出来显示的action:

 

 

package com.Domj4;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class PlecarModifyQueryXml extends Action{
	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		    request.setCharacterEncoding("GBK");
		    response.setCharacterEncoding("text/html;charset=GBK");//设置响应的编码.
		    
		    String fileUrl = request.getRealPath("/xml/plecar.xml");//拿到要访问的XML文件路径.
		    File file = new File(fileUrl);
		    
		    Document document = null;//声明文本Document对象.
		    Element plecar = null;//声明表示根节点的Element对象.
		    
		    int id = Integer.parseInt(request.getParameter("id"));//拿到要修改的公告的ID.
		    Plecar plecar2 = new Plecar();//为每一个信息创建一个广告对象储存.

		    if(file.exists()) {//判断文件是不是存在.
		    	  SAXReader reader = new SAXReader();
		    	      try {
		    	    	  document = reader.read(new File(fileUrl));//获得要访问的XML文档的Document对象.
		    	    	  plecar = document.getRootElement();//拿到这个文档的根节点.
		    	    	  
		    	    	  Element item = (Element) plecar.selectSingleNode("/plecar/info[@id='"+id+"']");
		    	    	  if(item!=null) {
		    	    	  
		    	    	  String title = "";//标题.
		    	    	  String content = "";//内容.
		    	    	  String pubDate = "";//发布日期.
		    	    	  
		    	    	  id = Integer.parseInt(item.attributeValue("id"));//拿到信息对象的ID.
		    	    	  
		    	    		  if(item.element("title").getText()!=null) {
		    	    			  title = item.element("title").getText();//获取标题.
		    	    		  }else {
		    	    			  title = "Sorry 暂时没有相关的公告";
		    	    		  }
		    	    		  if(item.element("content").getText()!=null) {
		    	    			  content = item.element("content").getText();//拿到公告的内容.
		    	    		  }
		    	    		  else {
		    	    			  content = "没有相关的内容";
		    	    		  }
		    	    		  if(item.element("pubDate").getText()!=null) {
		    	    			  pubDate = item.element("pubDate").getText();//获得发布日期.
		    	    		  }
		    	    		  plecar2.setTitle(title);
		    	    		  plecar2.setContent(content);
		    	    		  plecar2.setId(id);
		    	    		  plecar2.setPubDate(pubDate);
		    	    		  
		    	    	  }
		    	      }catch (Exception e) {
						System.out.println("文件修改的途中出现错误.");
					}finally {
						      document.clearContent();//释放资源.
					}
					}
		    request.setAttribute("plecarContent", plecar2);
		    return mapping.findForward("modify");
	}
		
}





 

 

5:这个是修改action:

 

 

package com.Domj4;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class PlecarModifyXml extends Action {
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		    request.setCharacterEncoding("GBK");
		    response.setCharacterEncoding("text/html;charset=GBK");
		    
		    int id = Integer.parseInt(request.getParameter("id"));//拿到要修改信息的ID.
		    
		    String title = request.getParameter("title");//拿到修改信息的标题.
		    String content = request.getParameter("content");//拿到要修改信息的.
		    
		    DateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分");//格式化发布日期.
		    String pubDate = dateFormat.format(new Date());//创建发布日期.
		    
		    String fileUrl = request.getRealPath("/xml/plecar.xml");////拿到要修改后要保存的文件.
		    File file = new File(fileUrl);
		    
		    Document document = null;//初始化文档对象.
		    Element plecar = null;//初始化根节点对象.
		      if(file.exists()) {
		    	  SAXReader reader = new SAXReader();
		    	     try {
		    	    	 document = reader.read(new File(fileUrl));//获取要修改文件的Document对象.
		    	    	 plecar = document.getRootElement();//获得根节点.
		    	    	 
		    	    	 Element item = (Element)plecar.selectSingleNode("/plecar/info[@id='"+id+"']");
		    	    	 
		    	    	 if(item!=null) {
		    	    		 item.element("title").setText(title);//修改标题.
		    	    		 item.element("content").setText(content);//设置内容.
		    	    		 item.element("pubDate").setText(pubDate);//设置发布日期.
		    	    	 }
		    	     }catch (Exception e) {
						System.out.println("文件修改的时候出现错误!");
					}
		      }
		      
		      OutputFormat format = OutputFormat.createPrettyPrint();//设置信息存入的格式,也就是缩进方式.
		      format.setEncoding("GBK");//设置写入文件的编码格式.
		            try {
		            	XMLWriter writer = new XMLWriter(new FileWriter(fileUrl),format);
		            	          writer.write(document);//写入文本.
		            	          writer.close();//关闭写入流.
		            	          document.clearContent();//释放资源.
		            }catch (IOException e) {
						System.out.println("数据写入文本的时候出现问题!");
					}
		     request.setAttribute("modifySuccess", "修改数据成功!");
		     return mapping.findForward("index");
	}
	
}




 

 

6:这个是删除信息的action:

 

 

package com.Domj4;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class PlecarDeleteXml extends Action {

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		int id = Integer.parseInt(request.getParameter("id"));
		
		String fileUrl = request.getRealPath("/xml/plecar.xml");//拿到文件的绝对位置.
		File file = new File(fileUrl);
		
		Document document = null;//初始化文档Document对象.
		Element plecar = null;//初始化根节点对象.
		    if(file.exists()) {
		    	SAXReader reader = new SAXReader();//拿到读取器.
		           try {
		    	          document = reader.read(new File(fileUrl));//读取文件.
		    	          plecar =  document.getRootElement();//拿到根节点.
		    	          
		    	          Element item =  (Element)plecar.selectSingleNode("/plecar/info[@id='"+id+"']");//拿到对应的节点.
		    	          if(item!=null) {//判断节点是不是存在.
		    	        	  plecar.remove(item);//删除相对应的节点.
		    	          }
		               }catch (DocumentException e) {
						   System.out.println("数据删除出现问题.");
					   }
		           }
		    //创建OutputFormat对象.
		    OutputFormat format = OutputFormat.createPrettyPrint();//格式化为缩进方式.
		    format.setEncoding("GBK");//设置编码.
		    
		    try {
		    	XMLWriter writer = new XMLWriter(new FileWriter(fileUrl),format);
		    	          writer.write(document);//把数据重新写到文件中.
		    	          writer.close();//关闭写入流.
		    }catch (IOException e) {
				System.out.println("在数据被删除的时候,写入数据出现问题");
			}finally {
				document.clearContent();//释放资源.
			}
		request.setAttribute("deleteSuccess", "删除数据成功");
		return mapping.findForward("delete");
	}

}




 

 

 7:这个是删除所有文件信息的action:

 

 

package com.Domj4;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class deleteAll extends Action {
	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		String fileUrl =request.getRealPath("/xml/plecar.xml");//拿到要删除文件的绝对位置.
		File file = new File(fileUrl);
		
		Document document = null;//获取文件的Document对象.
		Element plecar = null;//拿到文件的根节点.
		if(file.exists()) {
			SAXReader reader = new SAXReader();
			    try {
			    	document = reader.read(new File(fileUrl));//读取文件.
			    	plecar = document.getRootElement();//拿到根节点.
			    	plecar.elements("info").clear();//删除所有的info节点.
			    }catch (DocumentException e) {
					System.out.println("删除文件的INFO所有节点出现错误.");//
				}
		}
		//创建格式化对象.
		OutputFormat format = OutputFormat.createPrettyPrint();//格式化对象的创建.
		format.setEncoding("GBK");//设置文件希写入的编码格式.
		    try {
		    	XMLWriter writer = new XMLWriter(new FileWriter(fileUrl),format);
		    			  writer.write(document);//想流写入数据.
		    			  writer.close();//关闭数据流.
		    }catch (IOException e) {
				System.out.println("数据库写入文件的时候出现错误.");
			}finally {
				document.clearContent();//释放资源.
			}
	    request.setAttribute("deleteAllOk", "已经成功删除所有的公告");
		return mapping.findForward("ShowDeleteAllAfter");
	}

}







 

 

 

 

<think>dom4j一个用于处理XML的Java库,它提供了灵活且高性能的XML解析和操作功能。下面我将给出一个使用dom4j解析XML文件、修改内容并保存的例子。 ### 示例:使用dom4j解析和修改XML 假设我们有一个XML文件(example.xml)如下: ```xml <books> <book id="1"> <title>Java Programming</title> <author>James Gosling</author> </book> <book id="2"> <title>Effective Java</title> <author>Joshua Bloch</author> </book> </books> ``` #### 目标: 1. 解析该XML文件。 2. 遍历所有book元素,如果id为1,则修改其作者为“James Gosling and Ken Arnold”。 3. 将修改后的XML保存到新文件。 #### 步骤: 1. 添加dom4j依赖(如果使用Maven): ```xml <dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>2.1.4</version> </dependency> ``` 2. Java代码示例: ```java import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.List; public class Dom4jExample { public static void main(String[] args) { try { // 1. 创建SAXReader对象 SAXReader reader = new SAXReader(); // 2. 读取XML文件 Document document = reader.read(new File("example.xml")); // 3. 获取根元素 Element root = document.getRootElement(); // 4. 获取所有book元素 List<Element> books = root.elements("book"); // 5. 遍历并修改 for (Element book : books) { String id = book.attributeValue("id"); if ("1".equals(id)) { // 找到author元素并修改文本 Element author = book.element("author"); author.setText("James Gosling and Ken Arnold"); } } // 6. 将修改后的文档写入新文件 XMLWriter writer = new XMLWriter(new FileWriter("modified_example.xml")); writer.write(document); writer.close(); System.out.println("XML修改完成,已保存到modified_example.xml"); } catch (DocumentException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } ``` #### 解释: - **SAXReader**: 用于读取XML文件并构建一个Document对象。 - **Document**: 代表整个XML文档。 - **Element**: 代表XML元素,可以通过它获取子元素、属性等。 - **element.elements("name")**: 获取指定名称的所有子元素(返回List<Element>)。 - **element.element("name")**: 获取指定名称的第一个子元素。 - **attributeValue("name")**: 获取属性的值。 - **setText(String)**: 设置元素的文本内容。 - **XMLWriter**: 用于将Document写入文件。 #### 注意事项: - 异常处理:代码中需要处理DocumentException(读取XML错误)和IOException(文件写入错误)。 - 关闭资源:使用XMLWriter后需要调用close()方法关闭资源,或者使用try-with-resources(Java 7+)自动关闭。 ### §§相关问题§§: 1. dom4j和DOM解析器有什么区别? 2. 如何使用dom4j创建新的XML文档? 3. 在dom4j中如何删除一个节点? 4. dom4j支持XPath吗?如果支持,如何使用? </think> ### 使用dom4j解析XML的完整示例 以下是使用dom4j解析XML文件、修改内容并保存的完整代码示例: ```java import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import java.io.File; import java.io.FileWriter; import java.util.List; public class Dom4jExample { public static void main(String[] args) { try { // 1. 创建XML读取器 SAXReader reader = new SAXReader(); // 2. 加载XML文件(假设文件名为data.xml) Document document = reader.read(new File("data.xml")); // 3. 获取根元素 Element root = document.getRootElement(); System.out.println("根元素: " + root.getName()); // 4. 遍历所有<book>元素 List<Element> books = root.elements("book"); for (Element book : books) { // 获取属性 String id = book.attributeValue("id"); System.out.println("\n图书ID: " + id); // 获取子元素文本 Element title = book.element("title"); Element author = book.element("author"); System.out.println("标题: " + title.getText()); System.out.println("作者: " + author.getText()); // 修改第一本书的作者 if ("1".equals(id)) { author.setText("Modified Author"); } } // 5. 添加新元素 Element newBook = root.addElement("book") .addAttribute("id", "3") .addAttribute("category", "novel"); newBook.addElement("title").setText("New Book Title"); newBook.addElement("author").setText("New Author"); // 6. 保存修改后的XML XMLWriter writer = new XMLWriter( new FileWriter("modified_data.xml") ); writer.write(document); writer.close(); System.out.println("\nXML修改已保存到 modified_data.xml"); } catch (DocumentException e) { System.err.println("XML解析错误: " + e.getMessage()); } catch (Exception e) { System.err.println("操作失败: " + e.getMessage()); } } } ``` ### 示例XML文件 (data.xml) ```xml <?xml version="1.0" encoding="UTF-8"?> <library> <book id="1" category="programming"> <title>Java核心技术</title> <author>Cay S. Horstmann</author> </book> <book id="2" category="design"> <title>设计模式</title> <author>Erich Gamma</author> </book> </library> ``` ### 关键操作说明: 1. **XML解析**: - 使用`SAXReader`读取XML文件 - `document.getRootElement()`获取根元素 2. **元素遍历**: - `element.elements("tagName")`获取所有指定子元素 - `element.element("tagName")`获取单个子元素 3. **数据获取**: - `attributeValue()`获取属性值 - `getText()`获取元素文本内容 4. **修改XML**: - `setText()`修改元素内容 - `addElement()`添加新元素 - `addAttribute()`添加属性 5. **保存修改**: - 使用`XMLWriter`将修改后的DOM树写入新文件 ### 输出结果: ``` 根元素: library 图书ID: 1 标题: Java核心技术 作者: Cay S. Horstmann 图书ID: 2 标题: 设计模式 作者: Erich Gamma XML修改已保存到 modified_data.xml ``` 修改后的XML文件 (modified_data.xml) 将包含: 1. 第一本书的作者变为"Modified Author" 2. 新增第三本书的完整信息 ### 常见问题解决: 1. **依赖问题**:需添加dom4j库(Maven配置): ```xml <dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>2.1.4</version> </dependency> ``` 2. **文件路径错误**: - 确保XML文件位于项目根目录 - 使用绝对路径:`new File("C:/path/to/data.xml")` 3. **编码问题**: - 保存时指定编码: ```java OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); XMLWriter writer = new XMLWriter(new FileWriter("output.xml"), format); ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值