`
pharaohsprince
  • 浏览: 296888 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

在JSP开发中使用jdom解析临时存放数据的XML文件 (转)

阅读更多
在工作过程中,遇到了对临时存储产品信息的XML文件进行操作的问题.其中就有对XML文件的解析操作,考虑到用DOM或SAX比较麻烦,于是我选择了用jdom进行解析.因为我的XML文件结构比较简单,仅有两层,而且没有复杂的属性,所以没有用到里面太多的方法,只希望能够抛砖引玉,给初学者一点帮助.
    下面我就把大概的实现过程说一说.
    一.实现解析xml文件的JavaBean(XMLBean):
    我把对存放产品信息的xml文档的全部操作都写在了XMLBean()里面,包括添加,修改,删除一条记录,查看相关记录等操作.具体实现的代码如下:
package xml;
import java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.output.*;
import org.jdom.input.*;
import javax.servlet.*;
import javax.servlet.http.*;
/**
 * <p>Title:XMLBean</p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2005</p>
 * @author lihs 
 * @version 1.0
**/
/*
**
**通过往XML文件里面添加,删除,修改记录。从而实现对生产部门提交产品信息的处理。
*/
public class XMLBean{
    private String ProduceID,ProduceName,ProduceClass,ProduceType,ProduceColor,Baozhiqi,ProduceNum,ProduceDep,ProduceDate;
    public String getProduceID() { return ProduceID;}
    public String getProduceName() { return ProduceName;}
    public String getProduceClass() { return ProduceClass;}
    public String getProduceType() { return ProduceType;}
    public String getProduceColor() { return ProduceColor;}
    public String getBaozhiqi() { return Baozhiqi;}
    public String getProduceNum() { return ProduceNum;}
    public String getProduceDep() { return ProduceDep;}
    public String getProduceDate() { return ProduceDate;}
    public void setProduceID(String produceid) { this.ProduceID =produceid ; }
    public void setProduceName(String producename) { this.ProduceName =producename; }
    public void setProduceClass(String produceclass) { this.ProduceClass =produceclass ; }
    public void setProduceType(String producetype) { this.ProduceType =producetype ; }
    public void setProduceColor(String producecolor) { this.ProduceColor =producecolor ; }
    public void setBaozhiqi(String baozhiqi) { this.Baozhiqi =baozhiqi ; }
    public void setProduceNum(String producenum) { this.ProduceNum =producenum ; }
    public void setProduceDep(String producedep) { this.ProduceDep =producedep ; }
    public void setProduceDate(String producedate) { this.ProduceDate =producedate ; }
    public XMLBean(){}
/**
* 通过传入路径读取XML文件的内容。
*/
    public Vector LoadXML(String path)throws Exception{
        Vector xmlVector = null;
        FileInputStream fi = null;
        try{
            fi = new FileInputStream(path);
            xmlVector = new Vector();
            SAXBuilder sb = new SAXBuilder();
            Document doc = sb.build(fi);
            Element root = doc.getRootElement(); //获取根节点
            List produces = root.getChildren(); //获取根节点下面的所有子元素
            Element produce =null;
            XMLBean xml =null;
            for(int i=0;i<produces.size();i++){
                xml = new XMLBean();
                produce = (Element)produces.get(i ); //取得指定的孩子节点信息
                xml.setProduceID(produce.getChild("ProduceID").getText());
                xml.setProduceName(produce.getChild("ProduceName").getText());
                xml.setProduceClass(produce.getChild("ProduceClass").getText());
                xml.setProduceType(produce.getChild("ProduceType").getText());
                xml.setProduceColor(produce.getChild("ProduceColor").getText());
                xml.setBaozhiqi(produce.getChild("Baozhiqi").getText());
                xml.setProduceNum(produce.getChild("ProduceNum").getText());
                xml.setProduceDep(produce.getChild("ProduceDep").getText());
                xml.setProduceDate(produce.getChild("ProduceDate").getText());
                xmlVector.add(xml);
            }
        }
        catch(Exception e){
            System.err.println(e+"error");
        }
        finally{
            try{
                fi.close();
            }
            catch(Exception e){
                e.printStackTrace();
            }
        }
        return xmlVector;
    }
/**
* 删除指定的元素信息
*/
    public static void DelXML(HttpServletRequest request)throws Exception{
        FileInputStream fi = null;
        FileOutputStream fo = null;
        try{
            String path=request.getParameter("path");
            int xmlid=Integer.parseInt(request.getParameter("id"));
            fi = new FileInputStream(path);
            SAXBuilder sb = new SAXBuilder();
            Document doc = sb.build(fi);
            Element root = doc.getRootElement(); 
            List produces = root.getChildren(); 
            produces.remove(xmlid);
            String indent = "";
            boolean newLines = true;
            XMLOutputter outp = new XMLOutputter(indent,newLines,"GBK");
            fo=new FileOutputStream(path);
            outp.output(doc,fo);
        }
        catch(Exception e){
            System.err.println(e+"error");
        }
        finally{
                try{
                    fi.close();
                    fo.close();
                }
                catch(Exception e){
                    e.printStackTrace();
                }
        }
    }
/**
* 往XML文件中添加一条记录产品信息
**/
    public static void AddXML(HttpServletRequest request)throws Exception{
        FileInputStream fi = null;
        FileOutputStream fo = null;
        try{
            XMLBean bean=new XMLBean();
            String path=request.getParameter("path");
            fi = new FileInputStream(path);
            SAXBuilder sb = new SAXBuilder();
            Document doc = sb.build(fi);
            Element root = doc.getRootElement(); //
            List produces = root.getChildren(); //
            String produceid=bean.toChinese(request.getParameter("ProduceID"));
            String producename=bean.toChinese(request.getParameter("ProduceName"));
            String produceclass=bean.toChinese(request.getParameter("ProduceClass"));
            String producetype=bean.toChinese(request.getParameter("ProduceType"));
            String producecolor=bean.toChinese(request.getParameter("ProduceColor"));
            String baozhiqi=bean.toChinese(request.getParameter("Baozhiqi"));
            String producenum=bean.toChinese(request.getParameter("ProduceNum"));
            String producedep=bean.toChinese(request.getParameter("ProduceDep"));
            String producedate=bean.toChinese(request.getParameter("ProduceDate"));
            Text newtext;
            Element newproduce= new Element("Produce");
            Element newproduceid= new Element("ProduceID");
            newproduceid.setText(produceid);
            newproduce.addContent(newproduceid);
            //
            Element newproducename= new Element("ProduceName");
            newproducename.setText(producename);
            newproduce.addContent(newproducename);
            //
            Element newproduceclass= new Element("ProduceClass");
            newproduceclass.setText(produceclass);
            newproduce.addContent(newproduceclass);
            //
            Element newproducetype= new Element("ProduceType");
            newproducetype.setText(producetype);
            newproduce.addContent(newproducetype);
            //
            Element newproducecolor= new Element("ProduceColor");
            newproducecolor.setText(producecolor);
            newproduce.addContent(newproducecolor);
            //
            Element newbaozhiqi= new Element("Baozhiqi");
            newbaozhiqi.setText(baozhiqi);
            newproduce.addContent(newbaozhiqi);
            //
            Element newproducenum= new Element("ProduceNum");
            newproducenum.setText(producenum);
            newproduce.addContent(newproducenum);
            //
            Element newproducedep= new Element("ProduceDep");
            newproducedep.setText(producedep);
            newproduce.addContent(newproducedep);
            //
            Element newproducedate= new Element("ProduceDate");
            newproducedate.setText(producedate);
            newproduce.addContent(newproducedate);
            produces.add(newproduce);//
            String indent = "\n";
            boolean newLines = true;
            XMLOutputter outp = new XMLOutputter(indent,newLines,"GBK");
            fo=new FileOutputStream(path);
            outp.output(doc,fo);
        }
        catch(Exception e){
            System.err.println(e+"error");
            }
        finally{
                try{
                    fi.close();
                    fo.close();
                    }
        catch(Exception e){
                e.printStackTrace();
                }
            }
    }
/**
* 更改XML中指定的记录的信息
*/
    public static void EditXML(HttpServletRequest request)throws Exception{
        FileInputStream fi = null;
        FileOutputStream fo = null;
        try{
            XMLBean bean=new XMLBean();
            String path=request.getParameter("path");
            int xmlid=Integer.parseInt(request.getParameter("id"));
            fi = new FileInputStream(path);
            SAXBuilder sb = new SAXBuilder();
            Document doc = sb.build(fi);
            Element root = doc.getRootElement(); //
            List produces = root.getChildren(); //
            Element produce=(Element)produces.get(xmlid);
            String produceid=bean.toChinese(request.getParameter("ProduceID"));
            String producename=bean.toChinese(request.getParameter("ProduceName"));
            String produceclass=bean.toChinese(request.getParameter("ProduceClass"));
            String producetype=bean.toChinese(request.getParameter("ProduceType"));
            String producecolor=bean.toChinese(request.getParameter("ProduceColor"));
            String baozhiqi=bean.toChinese(request.getParameter("Baozhiqi"));
            String producenum=bean.toChinese(request.getParameter("ProduceNum"));
            String producedep=bean.toChinese(request.getParameter("ProduceDep"));
            String producedate=bean.toChinese(request.getParameter("ProduceDate"));
            Text newtext;
            Element newproduceid= produce.getChild("ProduceID");
            newproduceid.setText(produceid);
            //
            Element newproducename=produce.getChild("ProduceName");
            newproducename.setText(producename);
            //
            Element newproduceclass=produce.getChild("ProduceClass");
            newproduceclass.setText(produceclass);
            //
            Element newproducetype=produce.getChild("ProduceType");
            newproducetype.setText(producetype);
            //
            Element newproducecolor=produce.getChild("ProduceColor");
            newproducecolor.setText(producecolor);
            //
            Element newbaozhiqi= produce.getChild("Baozhiqi");
            newbaozhiqi.setText(baozhiqi);
            //
            Element newproducenum=produce.getChild("ProduceNum");
            newproducenum.setText(producenum);
            //
            Element newproducedep=produce.getChild("ProduceDep");
            newproducedep.setText(producedep);
            //
            Element newproducedate=produce.getChild("ProduceDate");
            newproducedate.setText(producedate);
            //
                           books.set(xmlid,book);
            String indent = "\n";
            boolean newLines = true;
            XMLOutputter outp = new XMLOutputter(indent,newLines,"GBK");
            fo=new FileOutputStream(path);
            outp.output(doc,fo);
        }
        catch(Exception e){
            System.err.println(e+"error");
        }
        finally{
                try{
                    fi.close();
                    fo.close();
                }
                catch(Exception e){
                    e.printStackTrace();
                }
        }
    }
}
在这些方法中有很多重复的地方,因为是练习没有考虑太多,读者可以有选择的看一下.
    二.调用上面写的JavaBean的JSP程序如下:
    得到的结果是一个产品列表页面,它包含了XML文件中所有的产品记录,每条记录都有通向该记录详细信息的页面.同时每条记录后面都有查看,编辑,删除的链接,实现的方法都写在了上面的JavaBean里了,在JSP页面里面仅需要传给它相应参数即可.
    效果如下:
1.产品列表

2.产品详细信息

<%@ page contentType="text/html; charset=gb2312" language="java" errorPage="" %>
<%@ page language="java" import="java.util.*,xml.*"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>产品管理</title>
</head>
<LINK  href="../images/TBspace.css" type=text/css rel=stylesheet>
<body>
<center><table width="85%" height="96" border="0" align="center">
  <tr> 
    <td height="92"><img src="../image/common/produce_head.jpg" width="638" height="90"></td>
  </tr>
</table>
  <span class="style1">录入请求中的产品信息如下</span>
<table border="1" cellspacing="0" width="90%" bordercolorlight="#000000" bordercolordark="#FFFFFF" cellpadding="0">
    <tr>
        <td width="17%"  align="center" bgcolor="#D0D0D0" >产品编号</td>
        <td width="25%"  align="center" bgcolor="#D0D0D0" >产品名称</td>
        <td width="19%"  align="center"  bgcolor="#D0D0D0">产品类别</td>
        <td width="20%"  align="center" bgcolor="#D0D0D0">生产部门</td>
        <td  align="center" bgcolor="#D0D0D0" >查看</td>
        <td  align="center" bgcolor="#D0D0D0">编辑</td>
        <td  align="center" bgcolor="#D0D0D0">删除</td>
    </tr>
<%
    String path =application.getRealPath("/")+"produce.xml";
    XMLBean xml=new XMLBean();
    Vector xmlall=xml.LoadXML(path);
    for(int i=0;i<xmlall.size();i++){
        xml=(XMLBean)xmlall.elementAt(i );
%>
  <tr>
    <td width="17%"  align="center" ><%=xml.getProduceID()%></td>
    <td width="25%"  align="center" ><a href="showproduce.jsp?id=<%=i%>&path=<%=path%>"><%=xml.getProduceName()%></a></td>
    <td width="19%"  align="center" ><%=xml.getProduceClass()%></td>
    <td width="20%"  align="center" ><%=xml.getProduceDep()%></td>
    <td  align="center" ><a href="showproduce.jsp?id=<%=i%>&path=<%=path%>">view</a></td>
    <td  align="center" ><a href="updateproduce.jsp?ProduceID=<%=xml.getProduceID()%>&id=<%=i%>&path=<%=path%>">edit</a></td>
    <td  align="center" ><a href="okdeleteproduce.jsp?id=<%=i%>&path=<%=path%>">delete</a></td>
  </tr>
<%}%>
</table>
<input type="hidden" name="path" value="<%=path%>">
</center>
</body>
</html>
    三.存放产品信息的XML文件produce.xml如下:
<?xml version="1.0" encoding="GBK"?>
<Produces>
 <Produce>
  <ProduceID>PW0005</ProduceID>
  <ProduceName>CD绿毒女士 50ml</ProduceName>
  <ProduceClass>女式</ProduceClass>
  <ProduceType>50ml</ProduceType>
  <ProduceColor>粉红</ProduceColor>
  <Baozhiqi>5</Baozhiqi>
  <ProduceNum>480</ProduceNum>
  <ProduceDep>第二事业部</ProduceDep>
  <ProduceDate>2005-05-26</ProduceDate>
 </Produce>
 <Produce>....</Produce>
</Produces>
以上是本人的一点小总结,因为水平有限,不足还请大家谅解,谢谢!


分享到:
评论

相关推荐

    使用JDOM解析XML文件

    **正文** XML(eXtensible Markup Language)是一种标记语言,广泛用于数据交换、配置文件以及文档存储等场景。...在实际应用中,根据项目需求选择合适的解析策略,如需处理大量数据,可考虑使用更优化的XML处理库。

    java 使用JDOM解析xml文件.docx

    ClassPathXmlApplicationContext 类使用 JDOM 库解析 XML 文件,并将解析出来的对象存储在一个 Map 中。 使用 JDOM 库的优势 使用 JDOM 库解析 XML 文件有很多优势。首先,JDOM 库提供了一个简单易用的 API,易于...

    用jdom解析xml文件

    在这个例子中,我们将深入探讨如何使用JDOM解析XML文件,并进行遍历与构建。 首先,我们需要了解JDOM的基本概念。JDOM主要由三部分构成:SAXBuilder用于从XML源构建DOM树,Element代表XML文档的元素,Attribute代表...

    jdom解析xml文件

    在Java中,JDOM(Java Document Object Model)是一个流行的选择来解析和操作XML文档。它提供了一个纯Java的API,使开发者能够高效地读取、创建和修改XML内容。 ### JDOM基本概念 1. **Document对象**:JDOM的核心...

    jdom 读取XML 文件

    如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.jdom &lt;artifactId&gt;jdom2 &lt;version&gt;2.0.6 ``` 接下来,我们将详细介绍使用JDOM读取XML文件的步骤: 1. 加载XML文件:使用`...

    利用JDOM解析xml文件

    本篇文章将深入探讨如何利用JDOM解析XML文件,并基于XML中的类名生成相应的对象。 首先,我们需要理解JDOM的基本概念。JDOM提供了一组Java对象来表示XML文档,包括Element(元素)、Attribute(属性)、Text(文本...

    用jdom解析xml

    在这个教程中,我们将深入探讨如何在JSP(JavaServer Pages)环境中使用JDOM解析XML。 **1. JDOM基本概念** JDOM的核心在于两个主要类:`Element`和`Document`。`Element`代表XML文档中的一个节点,而`Document`则...

    java jdom解析xml

    Java JDOM解析XML是Java开发中处理XML文档的一种方法,JDOM全称为Java Document Object Model,它是一个基于Java语言的API,用于创建、修改和读取XML文档。JDOM为XML处理提供了一种高效且方便的解决方案,尤其适用于...

    jdom解析XML文件and把字符串解析成XML

    ### jdom解析XML文件及将字符串解析为XML #### 一、JDOM简介与环境搭建 JDOM(Java Document Object Model)是一种用Java语言编写的轻量级API,用于处理XML文档。它允许开发者轻松地读取、创建、修改XML文档,并将...

    java利用jdom解析xml文件

    Java中的JDOM库是用于解析XML文档的一种强大的工具。它提供了简单、高效的API来读取、修改和创建XML文件。本篇文章将深入探讨如何利用JDOM...在实际开发中,掌握XML和JDOM的操作对于处理结构化数据和接口通信至关重要。

    JDOM解析xml文档实例(自己编写,仅供参考)

    XML(可扩展标记语言)是一种用于存储和传输数据的标准格式,尤其在软件开发和Web服务中广泛应用。JDOM是Java中专门用来解析和操作XML的一个库,它提供了一种高效且方便的方式来处理XML文档。本实例将深入讲解如何...

    jdom解析xml文件小实例

    在这个小实例中,我们将深入探讨如何使用JDOM解析XML文件。 首先,我们需要引入JDOM的依赖。在Java项目中,如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.jdom &lt;artifactId&gt;...

    基于java的开发源码-用jdom解析xml.zip

    基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发...

    jsp处理xml文件的相关技术文档

    jsp处理xml文件的相关技术文档,有用DOM做XML处理.doc、用JDOM操作XML文.txt、在JSP开发中使用jdom解析临时存放数据的XML文件.txt、第8章_JSP实现对XML读写.pdf、从数据库Mysql读取数据转化为xml文档的Java类等,想...

    jdom包解析xml数据

    JDOM是一种使用 XML 的独特 Java 工具包,用于快速开发 XML 应用程序。它的设计包含 Java 语言的语法乃至语义。 JDOM是两位著名的 Java 开发人员兼作者,Brett Mclaughlin 和 Jason Hunter 的创作成果.

    jdom解析xml、dtd约束xml文件

    这是一个jdom解析xml的小例子、里面还有dtd文件的编写以及dtd文件约束xml文件。这是一个jdom解析xml的小例子、里面还有dtd文件的编写以及dtd文件约束xml文件。这是一个jdom解析xml的小例子、里面还有dtd文件的编写...

    java利用jdom读取xml文件

    Java语言在处理XML数据时,常常会用到各种解析库,其中之一便是JDOM。JDOM,全称为Java Document Object Model,是一种专为Java设计的XML处理API,它提供了对XML文档结构的完整映射,使得我们可以方便地创建、读取和...

    Dom JDom 解析xml 文件

    在Java中,解析XML文件是常见的任务,其中DOM(Document Object Model)和JDOM是两种常用的方法。 DOM解析是XML解析的一种方式,它将整个XML文档加载到内存中,形成一个树形结构,称为DOM树。每个节点代表XML文档的...

    JDOM解析XML

    在Java中,解析XML有多种方法,其中之一就是使用JDOM库。JDOM,全称Java Document Object Model,是专门为Java设计的一个解析XML的API,它提供了方便的构建和操作XML文档的方法。 JDOM的优势在于它完全基于Java,...

    JDOM解析本地XML

    在IT领域,XML(eXtensible Markup Language)是一种用于存储和传输数据的标准化格式,广泛应用在各种系统间的数据交换、配置文件以及文档结构化表示等场景。JDOM是Java中一个专门用来处理XML的库,它提供了一种高效...

Global site tag (gtag.js) - Google Analytics