最新更新 sitemap 网站制作设计本站搜索
网页设计
国外网站 韩国网站 个人主页 手提袋设计 CSS 网页特效 平面设计 网站设计 Flash CMS技巧 服装网站 php教程 photoshop 画册 服务器选用 数据库 Office
虚拟主机 域名注册 云主机 网页设计 客服QQ:8208442
当前位置:首页 > 编程开发 > jsp教程

jsp教程:JDOM操作XML文件(法老修正版)

日期:08-02    来源:中国设计秀    作者:cnwebshow.com

这篇文章讲的不错~把JDOM的基本操作实例化了,不过由于当时的作者用的JDOM版本还比较陈旧,所以部分代码会编译出错!支持中文也不好!所以,法老在原作者的基础上对程序做了修改!休正了编译出错以及中文乱码的问题。发表出来,供大家学习和使用。ALj中国设计秀
测试环境:jdom1.0,weblogic 8.1sp2,tomcat 5.0,IE 6。0ALj中国设计秀
/==================================正文开始=======================================/ALj中国设计秀
java + xml = JDOM ! ALj中国设计秀
这就是JDOM设计者的目标。如果你曾经使用过烦人的SAX或是DOM来处理XML,你就会知道为什么要有JDOM或者是JAXB。在今年(2002)的JavaOne会议上JDOM的主要创始人Jason Hunter有一篇精彩的演讲介绍了JDOM技术,题目就是JDOM Makes XML Easy。 ALj中国设计秀
获得并安装JDOM ALj中国设计秀
在http://jdom.org可以下载JDOM的最新版本。以JDOM 1.0的2进制版本为例。下载后解压缩,JDOM的jar文件就是build目录下的文件jdom.jar,将之加入类路径。另外JDOM还需要lib目录下那些jar文件如xerces.jar,jaxp.jar的支持。如果在使用中出现以下错误: ALj中国设计秀
java.lang.NoSuchMethodError ALj中国设计秀
ALj中国设计秀
java.lang.NoClassDefFoundError: org/xml/sax/SAXNotRecognizedException ALj中国设计秀
你需要保证xerces.jar文件在CLASSPATH中位于其他XML类,如JAXP或Crimson之前,这些类文件,包括以前老版本的xerces,可能不支持SAX2.0或DOM Level 2。于是导致了上面的错误。ALj中国设计秀

一个简单的例子 ALj中国设计秀
JDOM的处理方式有些类似于DOM,但它主要是用SAX实现的,你不必担心处理速度和内存的问题。另外,JDOM中几乎没有接口,的类全部是实实在在的类,没有类工厂类的。ALj中国设计秀

下面是实例用的XML文件: MyXml.xmlALj中国设计秀

<?xml version="1.0" encoding="utf-8"?>ALj中国设计秀
<书库>ALj中国设计秀
  <书>ALj中国设计秀
    <书名>Java编程入门</书名>ALj中国设计秀
    <作者>张三</作者>ALj中国设计秀
    <出版社>电子出版社</出版社>ALj中国设计秀
    <价格>35.0</价格>ALj中国设计秀
    <出版日期>2002-10-07</出版日期>ALj中国设计秀
  </书>ALj中国设计秀
  <书>ALj中国设计秀
    <书名>XML在Java中的应用</书名>ALj中国设计秀
    <作者>李四</作者>ALj中国设计秀
    <出版社>希望出版社</出版社>ALj中国设计秀
    <价格>92.0</价格>ALj中国设计秀
    <出版日期>2002-10-07</出版日期>ALj中国设计秀
  </书>ALj中国设计秀
</书库>ALj中国设计秀

ALj中国设计秀
下面是操作XML文件的Bean: XmlBean.javaALj中国设计秀

package jdom.test;ALj中国设计秀

/**ALj中国设计秀
 * XML的读写操作BeanALj中国设计秀
 */ALj中国设计秀
import java.io.*;ALj中国设计秀
import java.util.*;ALj中国设计秀
import org.jdom.*;ALj中国设计秀
import org.jdom.output.*;ALj中国设计秀
import org.jdom.input.*;ALj中国设计秀
import javax.servlet.*;ALj中国设计秀
import javax.servlet.http.*;ALj中国设计秀

public class XmlBean {ALj中国设计秀
 PRivate String bookname, author, pub, price, pubdate;ALj中国设计秀

 public String getbookname() {ALj中国设计秀
  return bookname;ALj中国设计秀
 }ALj中国设计秀

 public String getauthor() {ALj中国设计秀
  return author;ALj中国设计秀
 }ALj中国设计秀

 public String getpub() {ALj中国设计秀
  return pub;ALj中国设计秀
 }ALj中国设计秀

 public String getprice() {ALj中国设计秀
  return price;ALj中国设计秀
 }ALj中国设计秀

 public String getpubdate() {ALj中国设计秀
  return pubdate;ALj中国设计秀
 }ALj中国设计秀

 public void setbookname(String bookname) {ALj中国设计秀
  this.bookname = bookname;ALj中国设计秀
 }ALj中国设计秀

 public void setauthor(String author) {ALj中国设计秀
  this.author = author;ALj中国设计秀
 }ALj中国设计秀

 public void setpub(String pub) {ALj中国设计秀
  this.pub = pub;ALj中国设计秀
 }ALj中国设计秀

 public void setprice(String price) {ALj中国设计秀
  this.price = price;ALj中国设计秀
 }ALj中国设计秀

 public void setpubdate(String pubdate) {ALj中国设计秀
  this.pubdate = pubdate;ALj中国设计秀
 }ALj中国设计秀

 public XmlBean() {ALj中国设计秀
 }ALj中国设计秀

 /**ALj中国设计秀
  * 读取XML文件所有信息ALj中国设计秀
  */ALj中国设计秀
 public Vector LoadXML(String path) throws Exception {ALj中国设计秀
  Vector xmlVector = null;ALj中国设计秀
  FileInputStream fi = null;ALj中国设计秀
  try {ALj中国设计秀
   fi = new FileInputStream(path);ALj中国设计秀
   xmlVector = new Vector();ALj中国设计秀
   SAXBuilder sb = new SAXBuilder();ALj中国设计秀
   Document doc = sb.build(fi);ALj中国设计秀
   Element root = doc.getRootElement(); // 得到根元素ALj中国设计秀
   List books = root.getChildren(); // 得到根元素所有子元素的集合ALj中国设计秀
   Element book = null;ALj中国设计秀
   XmlBean xml = null;ALj中国设计秀
   for (int i = 0; i < books.size(); i++) {ALj中国设计秀
    xml = new XmlBean();ALj中国设计秀
    book = (Element) books.get(i); // 得到第一本书元素ALj中国设计秀
    xml.setbookname(book.getChild("书名").getText());ALj中国设计秀
    xml.setauthor(book.getChild("作者").getText());ALj中国设计秀
    xml.setpub(book.getChild("出版社").getText());ALj中国设计秀
    xml.setprice(book.getChild("价格").getText());ALj中国设计秀
    xml.setpubdate(book.getChild("出版日期").getText());ALj中国设计秀
    xmlVector.add(xml);ALj中国设计秀
   }ALj中国设计秀
  } catch (Exception e) {ALj中国设计秀
   System.err.println(e + "error");ALj中国设计秀
  } finally {ALj中国设计秀
   try {ALj中国设计秀
    fi.close();ALj中国设计秀
   } catch (Exception e) {ALj中国设计秀
    e.printStackTrace();ALj中国设计秀
   }ALj中国设计秀
  }ALj中国设计秀
  return xmlVector;ALj中国设计秀
 }ALj中国设计秀

 /**ALj中国设计秀
  * 删除XML文件指定信息ALj中国设计秀
  */ALj中国设计秀
 public static void DelXML(HttpServletRequest request) throws Exception {ALj中国设计秀
  FileInputStream fi = null;ALj中国设计秀
  FileOutputStream fo = null;ALj中国设计秀
  try {ALj中国设计秀
   request.setCharacterEncoding("GBK");ALj中国设计秀
   String path = request.getParameter("path");ALj中国设计秀
   int xmlid = Integer.parseInt(request.getParameter("id"));ALj中国设计秀
   fi = new FileInputStream(path);ALj中国设计秀
   SAXBuilder sb = new SAXBuilder();ALj中国设计秀
   Document doc = sb.build(fi);ALj中国设计秀
   Element root = doc.getRootElement(); // 得到根元素ALj中国设计秀
   List books = root.getChildren(); // 得到根元素所有子元素的集合ALj中国设计秀
   books.remove(xmlid);// 删除指定位置的子元素ALj中国设计秀
//   String indent = " ";ALj中国设计秀
//   boolean newLines = true;ALj中国设计秀
//   XMLOutputter outp = new XMLOutputter(indent, newLines, "GBK");ALj中国设计秀
      Format format = Format.getPrettyFormat();ALj中国设计秀
      format.setIndent("  ");ALj中国设计秀
      format.setEncoding("utf-8");ALj中国设计秀
      XMLOutputter outp = new XMLOutputter(format);ALj中国设计秀
   fo = new FileOutputStream(path);ALj中国设计秀
   outp.output(doc, fo);ALj中国设计秀
  } catch (Exception e) {ALj中国设计秀
   System.err.println(e + "error");ALj中国设计秀
  } finally {ALj中国设计秀
   try {ALj中国设计秀
    fi.close();ALj中国设计秀
    fo.close();ALj中国设计秀
   } catch (Exception e) {ALj中国设计秀
    e.printStackTrace();ALj中国设计秀
   }ALj中国设计秀
  }ALj中国设计秀
 }ALj中国设计秀

 /**ALj中国设计秀
  * 添加XML文件指定信息ALj中国设计秀
  */ALj中国设计秀
 public static void AddXML(HttpServletRequest request) throws Exception {ALj中国设计秀
  FileInputStream fi = null;ALj中国设计秀
  FileOutputStream fo = null;ALj中国设计秀
  try {ALj中国设计秀
   request.setCharacterEncoding("GBK");ALj中国设计秀
   String path = request.getParameter("path");ALj中国设计秀
   fi = new FileInputStream(path);ALj中国设计秀
   SAXBuilder sb = new SAXBuilder();ALj中国设计秀
   Document doc = sb.build(fi);ALj中国设计秀
   Element root = doc.getRootElement(); // 得到根元素ALj中国设计秀
   List books = root.getChildren(); // 得到根元素所有子元素的集合ALj中国设计秀
   String bookname = request.getParameter("bookname");ALj中国设计秀
   String author = request.getParameter("author");ALj中国设计秀
   String price = request.getParameter("price");ALj中国设计秀
   String pub = request.getParameter("pub");ALj中国设计秀
   String pubdate = request.getParameter("pubdate");ALj中国设计秀
//   Text newtext;ALj中国设计秀
   Element newbook = new Element("书");ALj中国设计秀
   Element newname = new Element("书名");ALj中国设计秀
   newname.setText(bookname);ALj中国设计秀
   newbook.addContent(newname);ALj中国设计秀
   Element newauthor = new Element("作者");ALj中国设计秀
   newauthor.setText(author);ALj中国设计秀
   newbook.addContent(newauthor);ALj中国设计秀
   Element newpub = new Element("出版社");ALj中国设计秀
   newpub.setText(pub);ALj中国设计秀
   newbook.addContent(newpub);ALj中国设计秀
   Element newprice = new Element("价格");ALj中国设计秀
   newprice.setText(price);ALj中国设计秀
   newbook.addContent(newprice);ALj中国设计秀
   Element newdate = new Element("出版日期");ALj中国设计秀
   newdate.setText(pubdate);ALj中国设计秀
   newbook.addContent(newdate);ALj中国设计秀
   books.add(newbook);// 增加子元素ALj中国设计秀
//   String indent = " ";ALj中国设计秀
//   boolean newLines = true;ALj中国设计秀
//   XMLOutputter outp = new XMLOutputter(indent, newLines, "GBK");ALj中国设计秀
      Format format = Format.getPrettyFormat();ALj中国设计秀
      format.setIndent("  ");ALj中国设计秀
      format.setEncoding("utf-8");ALj中国设计秀
      XMLOutputter outp = new XMLOutputter(format);ALj中国设计秀
   fo = new FileOutputStream(path);ALj中国设计秀
   outp.output(doc, fo);ALj中国设计秀
  } catch (Exception e) {ALj中国设计秀
   System.err.println(e + "error");ALj中国设计秀
  } finally {ALj中国设计秀
   try {ALj中国设计秀
    fi.close();ALj中国设计秀
    fo.close();ALj中国设计秀
   } catch (Exception e) {ALj中国设计秀
    e.printStackTrace();ALj中国设计秀
   }ALj中国设计秀
  }ALj中国设计秀
 }ALj中国设计秀

 /**ALj中国设计秀
  * 修改XML文件指定信息ALj中国设计秀
  */ALj中国设计秀
 public static void EditXML(HttpServletRequest request) throws Exception {ALj中国设计秀
  FileInputStream fi = null;ALj中国设计秀
  FileOutputStream fo = null;ALj中国设计秀
  try {ALj中国设计秀
   request.setCharacterEncoding("GBK");ALj中国设计秀
   String path = request.getParameter("path");ALj中国设计秀
   int xmlid = Integer.parseInt(request.getParameter("id"));ALj中国设计秀
   fi = new FileInputStream(path);ALj中国设计秀
   SAXBuilder sb = new SAXBuilder();ALj中国设计秀
   Document doc = sb.build(fi);ALj中国设计秀
   Element root = doc.getRootElement(); // 得到根元素ALj中国设计秀
   List books = root.getChildren(); // 得到根元素所有子元素的集合ALj中国设计秀
   Element book = (Element) books.get(xmlid);ALj中国设计秀
   String bookname = request.getParameter("bookname");ALj中国设计秀
   String author = request.getParameter("author");ALj中国设计秀
   String price = request.getParameter("price");ALj中国设计秀
   String pub = request.getParameter("pub");ALj中国设计秀
   String pubdate = request.getParameter("pubdate");ALj中国设计秀
//   Text newtext;ALj中国设计秀
   Element newname = book.getChild("书名");ALj中国设计秀
   newname.setText(bookname);// 修改书名为新的书名ALj中国设计秀
   Element newauthor = book.getChild("作者");ALj中国设计秀
   newauthor.setText(author);ALj中国设计秀
   Element newpub = book.getChild("出版社");ALj中国设计秀
   newpub.setText(pub);ALj中国设计秀
   Element newprice = book.getChild("价格");ALj中国设计秀
   newprice.setText(price);ALj中国设计秀
   Element newdate = book.getChild("出版日期");ALj中国设计秀
   newdate.setText(pubdate);ALj中国设计秀
   // books.set(xmlid,book);//修改子元素ALj中国设计秀
//   String indent = " ";ALj中国设计秀
//   boolean newLines = true;ALj中国设计秀
//   XMLOutputter outp = new XMLOutputter(indent, newLines, "GBK");ALj中国设计秀
      Format format = Format.getPrettyFormat();ALj中国设计秀
      format.setIndent("  ");ALj中国设计秀
      format.setEncoding("utf-8");ALj中国设计秀
      XMLOutputter outp = new XMLOutputter(format);ALj中国设计秀
   fo = new FileOutputStream(path);ALj中国设计秀
   outp.output(doc, fo);ALj中国设计秀
  } catch (Exception e) {ALj中国设计秀
   System.err.println(e + "error");ALj中国设计秀
  } finally {ALj中国设计秀
   try {ALj中国设计秀
    fi.close();ALj中国设计秀
    fo.close();ALj中国设计秀
   } catch (Exception e) {ALj中国设计秀
    e.printStackTrace();ALj中国设计秀
   }ALj中国设计秀
  }ALj中国设计秀
 }ALj中国设计秀
}ALj中国设计秀

下面是操作的jsp文件: test.jspALj中国设计秀
<%@ page contentType="text/html;charset=GBK"%>ALj中国设计秀
<%@ page language="java" import="java.util.*,jdom.test.*"%>ALj中国设计秀
<html>ALj中国设计秀
<head>ALj中国设计秀
<title>读取XML文件资料</title>ALj中国设计秀
</head>ALj中国设计秀
<body>ALj中国设计秀
<h3 align="center">JDOM操作XML文件</h3>ALj中国设计秀
<p align="center">读取XML文件中的所有资料</p>ALj中国设计秀
<center>ALj中国设计秀
<table border="1" cellpadding="0" cellspacing="1"ALj中国设计秀
 style="border-collapse: collapse" width="80%" id="AutoNumber1">ALj中国设计秀
 <tr>ALj中国设计秀
  <td align="center" width="92">书名</td>ALj中国设计秀
  <td align="center" width="92">作者</td>ALj中国设计秀
  <td align="center" width="92">出版社</td>ALj中国设计秀
  <td align="center" width="92">价格</td>ALj中国设计秀
  <td align="center" width="92">出版日期</td>ALj中国设计秀
  <td align="center" width="94">操作</td>ALj中国设计秀
 </tr>ALj中国设计秀
</table>ALj中国设计秀
<%ALj中国设计秀
  String path = application.getRealPath("/JDOM/MyXml.xml");ALj中国设计秀
  XmlBean xml = new XmlBean();ALj中国设计秀
  Vector xmlall = xml.LoadXML(path);ALj中国设计秀
  for (int i = 0; i < xmlall.size(); i++) {ALj中国设计秀
   xml = (XmlBean) xmlall.elementAt(i);ALj中国设计秀
   /**out.println("书名:"+xml.getbookname()+"<br>");ALj中国设计秀
    out.println("作者:"+xml.getauthor()+"<br>");ALj中国设计秀
    out.println("出版社:"+xml.getpub()+"<br>");ALj中国设计秀
    out.println("价格:"+xml.getprice()+"<br>");ALj中国设计秀
    out.println("出版日期:"+xml.getpubdate()+"<br><br>");ALj中国设计秀
    */ALj中国设计秀
%>ALj中国设计秀
<table border="1" cellpadding="0" cellspacing="1"ALj中国设计秀
 style="border-collapse: collapse" width="80%" id="AutoNumber2">ALj中国设计秀
 <tr>ALj中国设计秀
  <td align="center" width="92"><%=xml.getbookname()%></td>ALj中国设计秀
  <td align="center" width="92"><%=xml.getauthor()%></td>ALj中国设计秀
  <td align="center" width="92"><%=xml.getpub()%></td>ALj中国设计秀
  <td align="center" width="92"><%=xml.getprice()%></td>ALj中国设计秀
  <td align="center" width="92"><%=xml.getpubdate()%></td>ALj中国设计秀
  <td align="center" width="94"><aALj中国设计秀
   href="xmlaction.jsp?act=del&id=<%=i%>&path=<%=path%>">删除</a></td>ALj中国设计秀
 </tr>ALj中国设计秀
</table>ALj中国设计秀
<%}%></center>ALj中国设计秀
<form method="POST" action="xmlaction.jsp">ALj中国设计秀
<p align="center"><input type="radio" value="add" checked name="act">添加资料ALj中国设计秀
<input type="radio" value="edit" name="act">编辑资料 序 号:<select size="1"ALj中国设计秀
 name="id">ALj中国设计秀
 <%for (int i = 0; i < xmlall.size(); i++) {%>ALj中国设计秀
 <option value="<%=i%>">第<%=i + 1%>条</option>ALj中国设计秀
 <%}%>ALj中国设计秀
</select><br>ALj中国设计秀
书 名:<input type="text" name="bookname" size="20"><br>ALj中国设计秀
作 者:<input type="text" name="author" size="20"><br>ALj中国设计秀
出版社:<input type="text" name="pub" size="20"><br>ALj中国设计秀
价 格:<input type="text" name="price" size="20"><br>ALj中国设计秀
日 期:<input type="text" name="pubdate" size="20"></p>ALj中国设计秀
<input type="hidden" name="path" value="<%=path%>">ALj中国设计秀
<p align="center"><input type="submit" value="提交" name="B1"><inputALj中国设计秀
 type="reset" value="重置" name="B2"></p>ALj中国设计秀
</form>ALj中国设计秀
</body>ALj中国设计秀
</html>ALj中国设计秀

下面是处理上一文件提交的jsp文件: xmlation.jspALj中国设计秀
<%@ page contentType="text/html;charset=GBK"%>ALj中国设计秀
<%@ page language="java" import="jdom.test.*"%>ALj中国设计秀
<%if (request.getParameter("act") != nullALj中国设计秀
    && request.getParameter("act").equals("add")) {ALj中国设计秀
   XmlBean.AddXML(request);ALj中国设计秀
   out.println("<p align='center'><br><br>添加成功<br><br><a href='test.jsp'>返回</a>");ALj中国设计秀
  } else if (request.getParameter("act") != nullALj中国设计秀
    && request.getParameter("act").equals("del")) {ALj中国设计秀
   XmlBean.DelXML(request);ALj中国设计秀
   out.println("<p align='center'><br><br>删除成功<br><br><a href='test.jsp'>返回</a>");ALj中国设计秀
  } else if (request.getParameter("act") != nullALj中国设计秀
    && request.getParameter("act").equals("edit")) {ALj中国设计秀
   XmlBean.EditXML(request);ALj中国设计秀
   out.println("<p align='center'><br><br>修改成功<br><br><a href='test.jsp'>返回</a>");ALj中国设计秀
  } else {ALj中国设计秀
   out.print("<p align='center'><br><br>非法操作<br><br><a href='test.jsp'>返回</a>");

本文引用地址:/bc/article_46631.html
网站地图 | 关于我们 | 联系我们 | 网站建设 | 广告服务 | 版权声明 | 免责声明