<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 0, comments - 77, trackbacks - 0, articles - 356
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    用JDOM操作XML文件

    Posted on 2007-08-21 10:28 semovy 閱讀(397) 評論(0)  編輯  收藏 所屬分類: 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 beta8的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文件:

    <?xml version="1.0" encoding="GBK"?>
    <書庫>
    <書>
    <書名>Java編程入門</書名>
    <作者>張三</作者>
    <出版社>電子出版社</出版社>
    <價格>35.0</價格>
    <出版日期>2002-10-07</出版日期>
    </書>
    <書>
    <書名>XML在Java中的應用</書名>
    <作者>李四</作者>
    <出版社>希望出版社</出版社>
    <價格>92.0</價格>
    <出版日期>2002-10-07</出版日期>
    </書>
    </書庫>

    下面是操作XML文件的Bean:
    package xml;
    /**
    * 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{
    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");
    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{
    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");
    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{
    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");
    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();
    }
    }
    }
    }

    下面是操作的jsp文件:
    <%@ page contentType="text/html;charset=GBK" %>
    <%@ page language="java" import="java.util.*,xml.*"%>
    <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("/test/xml/")+"testC.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="xmlok.jsp?act=del&id=<%=i%>&path=<%=path%>">刪除</a></td>
    </tr>
    </table>
    <%}%>
    </center>
    <form method="POST" action="xmlok.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文件:
    <%@ page contentType="text/html;charset=GBK" %>
    <%@ page language="java" import="xml.*"%>
    <%if(request.getParameter("act")!=null && request.getParameter("act").equals("add")){
    XmlBean.AddXML(request);
    out.println("<p align=’center’><br><br>添加成功<br><br><a href=’’>返回</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=’’>返回</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=’’>返回</a>");
    }
    else{out.print("<p align=’center’><br><br>非法操作<br><br><a href=’’>返回</a>");}

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 美女扒开尿口给男人爽免费视频 | 91视频免费观看高清观看完整| 亚洲人成影院在线观看| 99re6在线视频精品免费| 亚洲大片免费观看| 全黄性性激高免费视频| 一级毛片aaaaaa免费看| 亚洲国产精华液2020| 国产AV无码专区亚洲AV毛网站| 在人线av无码免费高潮喷水| 特级毛片在线大全免费播放| 亚洲日产2021三区| 亚洲精品高清在线| 四虎永久在线精品免费观看视频| 污网站免费在线观看| 亚洲人成免费电影| 国产亚洲老熟女视频| 免费观看毛片视频| 99在线视频免费| 一个人免费观看视频在线中文 | 91av免费在线视频| 亚洲色偷偷偷综合网| 亚洲国产精品无码久久一区二区| 日韩免费观看的一级毛片| 精品四虎免费观看国产高清午夜 | 四虎永久在线精品免费观看视频| 老司机精品免费视频| 亚洲天然素人无码专区| 色婷婷亚洲十月十月色天| 亚洲高清无码综合性爱视频| 久久WWW色情成人免费观看| 久久一区二区三区免费播放| 国产免费高清69式视频在线观看 | 亚洲第一精品电影网| 中文字幕亚洲图片| 又爽又高潮的BB视频免费看| 国产精品久久久久免费a∨| 一级毛片成人免费看免费不卡| 一级毛片在线免费视频| 亚洲AV无码国产剧情| 国产婷婷综合丁香亚洲欧洲|