新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> Oracle, SQL Server与XML,XML在数据挖掘中的应用, PMML.
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - 高级XML应用『 XML 与 数据库 』 → [转帖]用JDOM操作XML文件 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 37972 个阅读者浏览上一篇主题  刷新本主题   平板显示贴子 浏览下一篇主题
     * 贴子主题: [转帖]用JDOM操作XML文件 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     linzi1128 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:4
      积分:97
      门派:XML.ORG.CN
      注册:2006/3/28

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给linzi1128发送一个短消息 把linzi1128加入好友 查看linzi1128的个人资料 搜索linzi1128在『 XML 与 数据库 』的所有贴子 引用回复这个贴子 回复这个贴子 查看linzi1128的博客楼主
    发贴心情 [转帖]用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 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>");}


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/4/5 10:41:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XML 与 数据库 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/7 1:21:08

    本主题贴数15,分页: [1] [2]

     *树形目录 (最近20个回帖) 顶端 
    主题:  [转帖]用JDOM操作XML文件(10311字) - linzi1128,2006年4月5日
        回复:  谢谢阿,收藏,楼主辛苦,分享是一种快乐(38字) - jingwan,2008年6月15日
        回复:  为什么我的老师 XMLOutputter outp = new XMLOutputter(inde..(79字) - tianmu,2007年12月19日
        回复:  非常感谢。。。。。。。。。。(28字) - 东方伯,2007年8月2日
        回复:  楼主 我支持你啊(15字) - dinoworld,2007年6月30日
        回复:  good good(14字) - 西门吹牛,2007年6月16日
        回复:  楼主,你真是让人感动啊!!!(28字) - xiangrikui321,2007年5月18日
        回复:  非常感谢,谢谢你这篇文章,正是自己要用的。呵呵(46字) - yi_xiao,2006年11月25日
        回复:  最爱你了(8字) - sendoh_yin,2006年11月24日
        回复:  非常感谢!(10字) - sunyqq,2006年6月8日
        回复:  我喜欢这个东西!谢谢了(23字) - wfb,2006年6月1日
        回复:  很谢谢。终于找到想要的东西了。顶![em16](44字) - chafer0516,2006年5月18日
        回复:  谢谢啦!!!(9字) - andy1983,2006年5月7日
        回复:  楼主 厚道阿!好人拉!!(24字) - zhawei,2006年5月1日
        回复:  本人在做毕业设计过程中,在网上找到比较好的资料,不敢独享 ,希望对坛子里的朋友有所帮助。..(87字) - linzi1128,2006年4月5日

    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    797.852ms