關於我的JAVA開發——JDOM操作XML

來源:互聯網
上載者:User
      JDOM操作XML          Java + XML = JDOM ! 這就是JDOM設計者的目標。如果你曾經使用過煩人的SAX或是DOM來處理XML,你就會知道為什麼要有JDOM或者是JAXB。在今年(2002)的JavaOne會議上JDOM的主要創始人Jason Hunter有一篇精彩的演講介紹了JDOM技術,題目就是JDOM Makes XML Easy。 獲得並安裝JDOM 在http://jdom.org/可以下載JDOM的最新版本。以JDOM 1.0的2進位版本為例。下載後解壓縮,JDOM的jar檔案就是build目錄下的檔案jdom.jar,將之加入類路徑。另外JDOM還需要lib目錄下那些jar檔案如xerces.jar,jaxp.jar的支援。如果在使用中出現以下錯誤:
java.lang.NoSuchMethodError 或 java.lang.NoClassDefFoundError: org/xml/sax/SAXNotRecognizedException 你需要保證xerces.jar檔案在CLASSPATH中位於其他XML類,如JAXP或Crimson之前,這些類檔案,包括以前老版本的xerces,可能不支援SAX2.0或DOM Level 2。於是導致了上面的錯誤。 一個簡單的例子 JDOM的處理方式有些類似於DOM,但它主要是用SAX實現的,你不必擔心處理速度和記憶體的問題。另外,JDOM中幾乎沒有介面,的類全部是實實在在的類,沒有類工廠類的。 下面是執行個體用的XML檔案: MyXml.xml
<?xml version="1.0" encoding="utf-8"?><書庫>  <書>    <書名>Java編程入門</書名>    <作者>張三</作者>    <出版社>電子出版社</出版社>    <價格>35.0</價格>    <出版日期>2002-10-07</出版日期>  </書>  <書>    <書名>XML在Java中的應用</書名>    <作者>李四</作者>    <出版社>希望出版社</出版社>    <價格>92.0</價格>    <出版日期>2002-10-07</出版日期>  </書></書庫>

下面是操作的jsp檔案: test.jsp

<%@ page contentType="text/html;charset=GBK"%><%@ page language="java" import="java.util.*,jdom.test.*"%><html><head><title>讀取XML檔案資料</title></head><body><h3 align="center">JDOM操作XML檔案</h3><p align="center">讀取XML檔案中的所有資料</p><center><table border="1" cellpadding="0" cellspacing="1" style="border-collapse: collapse" width="80%" id="AutoNumber1"> <tr>  <td align="center" width="92">書名</td>  <td align="center" width="92">作者</td>  <td align="center" width="92">出版社</td>  <td align="center" width="92">價格</td>  <td align="center" width="92">出版日期</td>  <td align="center" width="94">操作</td> </tr></table><%  String path = application.getRealPath("/JDOM/MyXml.xml");  XmlBean xml = new XmlBean();  Vector xmlall = xml.LoadXML(path);  for (int i = 0; i < xmlall.size(); i++) {   xml = (XmlBean) xmlall.elementAt(i);   /**out.println("書名:"+xml.getbookname()+"<br>");    out.println("作者:"+xml.getauthor()+"<br>");    out.println("出版社:"+xml.getpub()+"<br>");    out.println("價格:"+xml.getprice()+"<br>");    out.println("出版日期:"+xml.getpubdate()+"<br><br>");    */%><table border="1" cellpadding="0" cellspacing="1" style="border-collapse: collapse" width="80%" id="AutoNumber2"> <tr>  <td align="center" width="92"><%=xml.getbookname()%></td>  <td align="center" width="92"><%=xml.getauthor()%></td>  <td align="center" width="92"><%=xml.getpub()%></td>  <td align="center" width="92"><%=xml.getprice()%></td>  <td align="center" width="92"><%=xml.getpubdate()%></td>  <td align="center" width="94"><a   href="xmlaction.jsp?act=del&id=<%=i%>&path=<%=path%>">刪除</a></td> </tr></table><%}%></center><form method="POST" action="xmlaction.jsp"><p align="center"><input type="radio" value="add" checked name="act">添加資料<input type="radio" value="edit" name="act">編輯資料 序 號:<select size="1" name="id"> <%for (int i = 0; i < xmlall.size(); i++) {%> <option value="<%=i%>">第<%=i + 1%>條</option> <%}%></select><br>書 名:<input type="text" name="bookname" size="20"><br>作 者:<input type="text" name="author" size="20"><br>出版社:<input type="text" name="pub" size="20"><br>價 格:<input type="text" name="price" size="20"><br>日 期:<input type="text" name="pubdate" size="20"></p><input type="hidden" name="path" value="<%=path%>"><p align="center"><input type="submit" value="提交" name="B1"><input type="reset" value="重設" name="B2"></p></form></body></html>

下面是處理上一檔案提交的jsp檔案: xmlation.jsp

<%@ page contentType="text/html;charset=GBK"%><%@ page language="java" import="jdom.test.*"%><%if (request.getParameter("act") != null    && request.getParameter("act").equals("add")) {   XmlBean.AddXML(request);   out.println("<p align=center><br><br>添加成功<br><br><a href=test.jsp>返回</a>");  } else if (request.getParameter("act") != null    && request.getParameter("act").equals("del")) {   XmlBean.DelXML(request);   out.println("<p align=center><br><br>刪除成功<br><br><a href=test.jsp>返回</a>");  } else if (request.getParameter("act") != null    && request.getParameter("act").equals("edit")) {   XmlBean.EditXML(request);   out.println("<p align=center><br><br>修改成功<br><br><a href=test.jsp>返回</a>");  } else {   out.print("<p align=center><br><br>非法操作<br><br><a href=test.jsp>返回</a>");  }%>

下面是操作XML檔案的Bean: XmlBean.java
jsppackage jdom.test;/** * XML的讀寫操作Bean */import java.io.*;import java.util.*;import org.jdom.*;import org.jdom.output.*;import org.jdom.input.*;import javax.servlet.*;import javax.servlet.http.*;public class XmlBean { private String bookname, author, pub, price, pubdate; public String getbookname() {  return bookname; } public String getauthor() {  return author; } public String getpub() {  return pub; } public String getprice() {  return price; } public String getpubdate() {  return pubdate; } public void setbookname(String bookname) {  this.bookname = bookname; } public void setauthor(String author) {  this.author = author; } public void setpub(String pub) {  this.pub = pub; } public void setprice(String price) {  this.price = price; } public void setpubdate(String pubdate) {  this.pubdate = pubdate; } 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 books = root.getChildren(); // 得到根項目所有子項目的集合   Element book = null;   XmlBean xml = null;   for (int i = 0; i < books.size(); i++) {    xml = new XmlBean();    book = (Element) books.get(i); // 得到第一本書元素    xml.setbookname(book.getChild("書名").getText());    xml.setauthor(book.getChild("作者").getText());    xml.setpub(book.getChild("出版社").getText());    xml.setprice(book.getChild("價格").getText());    xml.setpubdate(book.getChild("出版日期").getText());    xmlVector.add(xml);   }  } catch (Exception e) {   System.err.println(e + "error");  } finally {   try {    fi.close();   } catch (Exception e) {    e.printStackTrace();   }  }  return xmlVector; } /**  * 刪除XML檔案指定資訊  */ public static void DelXML(HttpServletRequest request) throws Exception {  FileInputStream fi = null;  FileOutputStream fo = null;  try {   request.setCharacterEncoding("GBK");   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 books = root.getChildren(); // 得到根項目所有子項目的集合   books.remove(xmlid);// 刪除指定位置的子項目//   String indent = " ";//   boolean newLines = true;//   XMLOutputter outp = new XMLOutputter(indent, newLines, "GBK");      Format format = Format.getPrettyFormat();      format.setIndent("  ");      format.setEncoding("utf-8");      XMLOutputter outp = new XMLOutputter(format);   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 {   request.setCharacterEncoding("GBK");   String path = request.getParameter("path");   fi = new FileInputStream(path);   SAXBuilder sb = new SAXBuilder();   Document doc = sb.build(fi);   Element root = doc.getRootElement(); // 得到根項目   List books = root.getChildren(); // 得到根項目所有子項目的集合   String bookname = request.getParameter("bookname");   String author = request.getParameter("author");   String price = request.getParameter("price");   String pub = request.getParameter("pub");   String pubdate = request.getParameter("pubdate");//   Text newtext;   Element newbook = new Element("書");   Element newname = new Element("書名");   newname.setText(bookname);   newbook.addContent(newname);   Element newauthor = new Element("作者");   newauthor.setText(author);   newbook.addContent(newauthor);   Element newpub = new Element("出版社");   newpub.setText(pub);   newbook.addContent(newpub);   Element newprice = new Element("價格");   newprice.setText(price);   newbook.addContent(newprice);   Element newdate = new Element("出版日期");   newdate.setText(pubdate);   newbook.addContent(newdate);   books.add(newbook);// 增加子項目//   String indent = " ";//   boolean newLines = true;//   XMLOutputter outp = new XMLOutputter(indent, newLines, "GBK");      Format format = Format.getPrettyFormat();      format.setIndent("  ");      format.setEncoding("utf-8");      XMLOutputter outp = new XMLOutputter(format);   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 {   request.setCharacterEncoding("GBK");   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 books = root.getChildren(); // 得到根項目所有子項目的集合   Element book = (Element) books.get(xmlid);   String bookname = request.getParameter("bookname");   String author = request.getParameter("author");   String price = request.getParameter("price");   String pub = request.getParameter("pub");   String pubdate = request.getParameter("pubdate");//   Text newtext;   Element newname = book.getChild("書名");   newname.setText(bookname);// 修改書名為新的書名   Element newauthor = book.getChild("作者");   newauthor.setText(author);   Element newpub = book.getChild("出版社");   newpub.setText(pub);   Element newprice = book.getChild("價格");   newprice.setText(price);   Element newdate = book.getChild("出版日期");   newdate.setText(pubdate);   // books.set(xmlid,book);//修改子項目//   String indent = " ";//   boolean newLines = true;//   XMLOutputter outp = new XMLOutputter(indent, newLines, "GBK");      Format format = Format.getPrettyFormat();      format.setIndent("  ");      format.setEncoding("utf-8");      XMLOutputter outp = new XMLOutputter(format);   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();   }  } }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.