<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 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    用JDOM操作XML文件

    Posted on 2007-08-21 10:28 semovy 閱讀(397) 評論(0)  編輯  收藏 所屬分類: XML相關(guān)
    Java + XML = JDOM ! 
    這就是JDOM設(shè)計者的目標(biāo)。如果你曾經(jīng)使用過煩人的SAX或是DOM來處理XML,你就會知道為什么要有JDOM或者是JAXB。在今年(2002)的JavaOne會議上JDOM的主要創(chuàng)始人Jason Hunter有一篇精彩的演講介紹了JDOM技術(shù),題目就是JDOM Makes XML Easy。 
    獲得并安裝JDOM 
    在http://jdom.org可以下載JDOM的最新版本。以JDOM beta8的2進(jìn)制版本為例。下載后解壓縮,JDOM的jar文件就是build目錄下的文件jdom.jar,將之加入類路徑。另外JDOM還需要lib目錄下那些jar文件如xerces.jar,jaxp.jar的支持。如果在使用中出現(xiàn)以下錯誤: 
    java.lang.NoSuchMethodError 
    或 
    java.lang.NoClassDefFoundError: org/xml/sax/SAXNotRecognizedException 
    你需要保證xerces.jar文件在CLASSPATH中位于其他XML類,如JAXP或Crimson之前,這些類文件,包括以前老版本的xerces,可能不支持SAX2.0或DOM Level 2。于是導(dǎo)致了上面的錯誤。 

    一個簡單的例子 
    JDOM的處理方式有些類似于DOM,但它主要是用SAX實現(xiàn)的,你不必?fù)?dān)心處理速度和內(nèi)存的問題。另外,JDOM中幾乎沒有接口,的類全部是實實在在的類,沒有類工廠類的。

    下面是實例用的XML文件:

    <?xml version="1.0" encoding="GBK"?>
    <書庫>
    <書>
    <書名>Java編程入門</書名>
    <作者>張三</作者>
    <出版社>電子出版社</出版社>
    <價格>35.0</價格>
    <出版日期>2002-10-07</出版日期>
    </書>
    <書>
    <書名>XML在Java中的應(yīng)用</書名>
    <作者>李四</作者>
    <出版社>希望出版社</出版社>
    <價格>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>");}

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 成人特黄a级毛片免费视频| 免费成人黄色大片| 亚洲av日韩aⅴ无码色老头| 亚洲国产人成精品| 热re99久久6国产精品免费| 亚洲日韩精品无码AV海量| 久久青青草原亚洲av无码| 67194国产精品免费观看| 国产天堂亚洲精品| 亚洲高清在线播放| 国产人成免费视频| 中文字幕视频免费| 一区二区三区免费看| 亚洲日韩中文字幕| 精品亚洲一区二区三区在线播放| 永久看日本大片免费35分钟| 成人a毛片视频免费看| 亚洲精品乱码久久久久久下载| 免费一级大黄特色大片| 亚洲黄色免费在线观看| 国产在线观a免费观看| 亚洲精品国产av成拍色拍| 久久精品国产亚洲AV嫖农村妇女| 亚洲人成色7777在线观看不卡| 99爱在线精品免费观看| 最近免费中文字幕MV在线视频3| 亚洲人片在线观看天堂无码| 亚洲国产综合91精品麻豆| 亚洲国产精品国产自在在线 | 好吊妞788免费视频播放| 国产在线观看免费视频软件| 美女羞羞喷液视频免费| 99久久婷婷国产综合亚洲| 亚洲精品综合一二三区在线| 国产黄色一级毛片亚洲黄片大全 | 免费一级特黄特色大片在线观看| 久草视频在线免费| 一区二区在线免费观看| 最近国语视频在线观看免费播放| 青青免费在线视频| 亚洲AV第一成肉网|