原文地址:http://book.51cto.com/art/201107/279382.htm
《Java Web开发实战1200例(第II卷)》本书以开发人员在项目开发中经常遇到的问题和必须掌握的技术为核心,介绍了应用Java Web进行程序开发的各个方面的知识和技巧,主要内容包括流行组件应用、数据库应用、图表统计、Ajax框架应用、流行框架、网站安全与架构模式、综合应用等。本节为大家介绍实例037 使用dom4j解析XML文件。
AD:
实例037 使用dom4j解析XML文件
dom4j是一种解析XML文档的开放源代码XML框架。应用dom4j框架解析XML文件,需要jaxen.jar包的支持。本实例实现的是使用dom4j向XML文件中写入数据,并将用户输入的信息保存到XML文件中,运行结果如图1.38所示。
![]() |
图1.38 使用dom4j解析XML文件 |
本实例实现的是应用dom4j向XML文件中写入数据,以下是涉及的类及方法。
(1)SAXReader类。
该类用于解析XML文档。
(2)Document类。
该类是一个文档实例。通过该类的addelement()方法可实现向XML文档中添加元素,并可获取封装文档子元素的Element对象。例如,创建根元素catalog,代码如下:
- Element catament = document.addelement("catalog");
(3)Element类。
该类封装了文档中的元素信息。该类中的常用方法有:
addcomment()方法:该方法用于向XML文档中添加注释。它有一个String类型的参数,注释内容为参数值。例如,下面的代码向catalog元素添加注释"a xml catalog"。
- catament.addcomment("a xml catalog");
addelement()方法:该方法用于向XML文件中添加子元素。它有一个String类型的参数,添加的子元素名称为参数内容。例如,下面的代码向XML文件中增加journal元素。
- Element journalelement = catalogelement.addelement("journal");
settext()方法:该方法用于设置元素的文本。它有一个String类型的参数,文本内容为参数值。例如,下面的代码为journal元素设置文本:
- journalelement.settext("hello word");
addAttribute()方法:该方法用于向元素中添加属性。它有两个String类型的参数,语法如下。
- addAttribute(String name ,String value)
参数说明
name:指定属性名称。
value:指定属性值。
(1)本实例实现的是将用户输入的论坛信息保存到XML文件中。XML文件中每条论坛信息对应着一个leave根元素,该元素还包含着多项子元素。XML文件结构如下:
- <?xml version="1.0" encoding="GBK"?>
- <!--声明XML文档版本与字符编码方式-->
- <leave>
- <date type="Gerver">2009年3月25日 星期三</date>
- <name>mr</name>
- <title>《java Web范例宝典》</title>
- <content>出版了!</content>
- </leave>
(2)根据XML文件定义的格式,创建Java Bean类Leave,该类中所包含属性与XML文件中的各子元素相对应,并包含了各属性的setXXX()与getXXX()方法。具体代码如下:
- public class Leave {
- private String name;
- private String date;
- private String title;
- private String content;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- …//省略了其他属性的setXXX()与getXXX()方法
- }
(3)本实例将用户输入留言信息的时间保存到XML文件中,留言时间并不需要用户输入,系统将获取当前时间,保存到XML文件中。具体代码如下:
- public class GetTime {
- public static String currentlyTime() {
- Date date = new Date(); //创建Date对象
- DateFormat dateFormat = DateFormat. getDateInstance(DateFormat.FULL);
- return dateFormat.format(date); //对系统时间格式化输出
- }
- }
(4)创建向XML文件中添加元素及元素值的方法addXmlNode(),该方法有两个参数,分别用于指定XML文件的地址以及Leave对象。具体代码如下:
- public boolean addXmlNode(String fileName,Leave leave){
- boolean rtn = false;
- SAXReader reader = new SAXReader(); //创建SAXReader对象,解析XML文档
- try{
- Document document = reader.read(new File (fileName)); //创建文档对象
- List list = document.selectNodes("/leave"); //获取leave元素中的子元素
- Iterator itr = list.iterator();
- Element journalElement = (Element)itr.next();
- Element dateElement = journalElement.addElement ("date"); //向XML文件中添加元素
- dateElement.setText(leave.getDate()); //设置元素值
- dateElement.addAttribute("type", "Gerver"); //设置元素属性
- Element nameElement = journalElement.addElement("name"); //向元素中添加子元素
- nameElement.setText(leave.getName()); //设置name元素值
- Element titleElement = journalElement.addElement("title"); //向元素中添加title子元素
- titleElement.setText(leave.getTitle()); //设置title子元素值
- Element contentElement = journalElement.addElement ("content"); //添加content子元素
- contentElement.setText(leave.getContent()); //设置content子元素值
- XMLWriter output;
- OutputFormat format = OutputFormat. createCompactFormat(); //创建OutputFormat对象
- format.setEncoding("GBK"); //设置写入流编码
- output = new XMLWriter(new FileWriter(fileName),format);
- output.write(document); //向流写入数据
- output.close(); //关闭流
- rtn = true;
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- return rtn;
- }
(5)当用户输入"帖子主题"、"帖子内容"后,单击"提交"按钮,系统将提交URL地址AddLeaveServlet。在该Servlet中将调用addXmlNode()方法,实现将数据写入XML文件中。Servlet中的代码如下:
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- String filePath = request.getRealPath(" /myxml/forum.xml"); //获取XML文件保存地址
- CreateXMl createXml = new CreateXMl(); //
- 创建保存有向XML文件中添加数据的类对象
- Leave leave = new Leave(); //创建Leave类对象
- leave.setName("mr"); //设置Leave类对象默认用户名
- leave.setTitle(request.getParameter("title")); //设置Leave类对象帖子主题
- leave.setContent(request.getParameter("content")); //设置Leave类对象帖子内容
- leave.setDate(GetTime.currentlyTime()); //设置Leave类对象发表时间
- String message = "帖子发表成功";
- boolean bool = createXml.addXmlNode(filePath,leave); //调用添加XML文件方法
- if(bool == false)
- message = "帖子发表失败";
- request.setAttribute("message",message); //将信息保存在request对象中
- RequestDispatcher requestrequestDispatcher =
- request.getRequestDispatcher("index.jsp"); //设置转发地址
- requestDispatcher.forward(request, response);
- }
心法领悟037:dom4j的扩展应用。
根据本实例,读者可以:
使用dom4j实现向XML文件中添加数据。
使用dom4j实现解析XML文件中的数据。