您的位置主页 > 编程专区 > Xml > 用JDOM操作XML文件

用JDOM操作XML文件

2009-01-01    文章来源:互联网    浏览次数:1366     分享文章

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文件:

<!--l version="1.0" encoding="GBK--><br /> <书库><br /> <书><br /> <书名>Java编程入门<br /> <作者>张三<br /> <出版社>电子出版社<br /> <价格>35.0<br /> <出版日期>2002-10-07<br /> <br /> <书><br /> <书名>XML在Java中的应用<br /> <作者>李四<br /> <出版社>希望出版社<br /> <价格>92.0<br /> <出版日期>2002-10-07<br /> <br /> <br /> <br /> 下面是操作XML文件的Bean:<br /> package xml;<br /> /**<br /> * XML的读写操作Bean<br /> */<br /> import java.io.*;<br /> import java.util.*;<br /> import org.jdom.*;<br /> import org.jdom.output.*;<br /> import org.jdom.input.*;<br /> import javax.servlet.*;<br /> import javax.servlet.http.*;<br /> public class XmlBean{<br /> private String bookname,author,pub,price,pubdate;<br /> public String getbookname() { return bookname;}<br /> public String getauthor() { return author;}<br /> public String getpub() { return pub;}<br /> public String getprice() { return price;}<br /> public String getpubdate() { return pubdate;}<br /> public void setbookname(String bookname) { this.bookname =bookname ; }<br /> public void setauthor(String author) { this.author =author; }<br /> public void setpub(String pub) { this.pub =pub ; }<br /> public void setprice(String price) { this.price =price ; }<br /> public void setpubdate(String pubdate) { this.pubdate =pubdate ; }<br /> public XmlBean(){}<br /> /**<br /> * 读取XML文件所有信息<br /> */<br /> public Vector LoadXML(String path)throws Exception{<br /> Vector xmlVector = null;<br /> FileInputStream fi = null;<br /> try{<br /> fi = new FileInputStream(path);<br /> xmlVector = new Vector();<br /> SAXBuilder sb = new SAXBuilder();<br /> Document doc = sb.build(fi);<br /> Element root = doc.getRootElement(); //得到根元素<br /> List books = root.getChildren(); //得到根元素所有子元素的集合<br /> Element book =null;<br /> XmlBean xml =null;<br /> for(int i=0;i xml = new XmlBean();<br /> book = (Element)books.get(i ); //得到第一本书元素<br /> xml.setbookname(book.getChild("书名").getText());<br /> xml.setauthor(book.getChild("作者").getText());<br /> xml.setpub(book.getChild("出版社").getText());<br /> xml.setprice(book.getChild("价格").getText());<br /> xml.setpubdate(book.getChild("出版日期").getText());<br /> xmlVector.add(xml);<br /> }<br /> }<br /> catch(Exception e){<br /> System.err.println(e+"error");<br /> }<br /> finally{<br /> try{<br /> fi.close();<br /> }<br /> catch(Exception e){<br /> e.printStackTrace();<br /> }<br /> }<br /> return xmlVector;<br /> }<br /> /**<br /> * 删除XML文件指定信息<br /> */<br /> public static void DelXML(HttpServletRequest request)throws Exception{<br /> FileInputStream fi = null;<br /> FileOutputStream fo = null;<br /> try{<br /> String path=request.getParameter("path");<br /> int xmlid=Integer.parseInt(request.getParameter("id"));<br /> fi = new FileInputStream(path);<br /> SAXBuilder sb = new SAXBuilder();<br /> Document doc = sb.build(fi);<br /> Element root = doc.getRootElement(); //得到根元素<br /> List books = root.getChildren(); //得到根元素所有子元素的集合<br /> books.remove(xmlid);//删除指定位置的子元素<br /> String indent = " ";<br /> boolean newLines = true;<br /> XMLOutputter outp = new XMLOutputter(indent,newLines,"GBK");<br /> fo=new FileOutputStream(path);<br /> outp.output(doc,fo);<br /> }<br /> catch(Exception e){<br /> System.err.println(e+"error");<br /> }<br /> finally{<br /> try{<br /> fi.close();<br /> fo.close();<br /> }<br /> catch(Exception e){<br /> e.printStackTrace();<br /> }<br /> }<br /> }<br /> /**<br /> * 添加XML文件指定信息<br /> */<br /> public static void AddXML(HttpServletRequest request)throws Exception{<br /> FileInputStream fi = null;<br /> FileOutputStream fo = null;<br /> try{<br /> String path=request.getParameter("path");<br /> fi = new FileInputStream(path);<br /> SAXBuilder sb = new SAXBuilder();<br /> Document doc = sb.build(fi);<br /> Element root = doc.getRootElement(); //得到根元素<br /> List books = root.getChildren(); //得到根元素所有子元素的集合<br /> String bookname=request.getParameter("bookname");<br /> String author=request.getParameter("author");<br /> String price=request.getParameter("price");<br /> String pub=request.getParameter("pub");<br /> String pubdate=request.getParameter("pubdate");<br /> Text newtext;<br /> Element newbook= new Element("书");<br /> Element newname= new Element("书名");<br /> newname.setText(bookname);<br /> newbook.addContent(newname);<br /> Element newauthor= new Element("作者");<br /> newauthor.setText(author);<br /> newbook.addContent(newauthor);<br /> Element newpub= new Element("出版社");<br /> newpub.setText(pub);<br /> newbook.addContent(newpub);<br /> Element newprice= new Element("价格");<br /> newprice.setText(price);<br /> newbook.addContent(newprice);<br /> Element newdate= new Element("出版日期");<br /> newdate.setText(pubdate);<br /> newbook.addContent(newdate);<br /> books.add(newbook);//增加子元素<br /> String indent = " ";<br /> boolean newLines = true;<br /> XMLOutputter outp = new XMLOutputter(indent,newLines,"GBK");<br /> fo=new FileOutputStream(path);<br /> outp.output(doc,fo);<br /> }<br /> catch(Exception e){<br /> System.err.println(e+"error");<br /> }<br /> finally{<br /> try{<br /> fi.close();<br /> fo.close();<br /> }<br /> catch(Exception e){<br /> e.printStackTrace();<br /> }<br /> }<br /> }<br /> /**<br /> * 修改XML文件指定信息<br /> */<br /> public static void EditXML(HttpServletRequest request)throws Exception{<br /> FileInputStream fi = null;<br /> FileOutputStream fo = null;<br /> try{<br /> String path=request.getParameter("path");<br /> int xmlid=Integer.parseInt(request.getParameter("id"));<br /> fi = new FileInputStream(path);<br /> SAXBuilder sb = new SAXBuilder();<br /> Document doc = sb.build(fi);<br /> Element root = doc.getRootElement(); //得到根元素<br /> List books = root.getChildren(); //得到根元素所有子元素的集合<br /> Element book=(Element)books.get(xmlid);<br /> String bookname=request.getParameter("bookname");<br /> String author=request.getParameter("author");<br /> String price=request.getParameter("price");<br /> String pub=request.getParameter("pub");<br /> String pubdate=request.getParameter("pubdate");<br /> Text newtext;<br /> Element newname= book.getChild("书名");<br /> newname.setText(bookname);//修改书名为新的书名<br /> Element newauthor= book.getChild("作者");<br /> newauthor.setText(author);<br /> Element newpub= book.getChild("出版社");<br /> newpub.setText(pub);<br /> Element newprice= book.getChild("价格");<br /> newprice.setText(price);<br /> Element newdate= book.getChild("出版日期");<br /> newdate.setText(pubdate);<br /> //books.set(xmlid,book);//修改子元素<br /> String indent = " ";<br /> boolean newLines = true;<br /> XMLOutputter outp = new XMLOutputter(indent,newLines,"GBK");<br /> fo=new FileOutputStream(path);<br /> outp.output(doc,fo);<br /> }<br /> catch(Exception e){<br /> System.err.println(e+"error");<br /> }<br /> finally{<br /> try{<br /> fi.close();<br /> fo.close();<br /> }<br /> catch(Exception e){<br /> e.printStackTrace();<br /> }<br /> }<br /> }<br /> }<br /> <br /> 下面是操作的jsp文件:<br /> <!--page contentType="text/html;charset=GBK"-->
<!--page language="java" import="java.util.*,xml.*--></p> <h3 align="center">JDOM操作XML文件

 

读取XML文件中的所有资料

 


书名 作者 出版社 价格 出版日期 操作

<!--r /> 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++){<br > </xmlall> xml=(XmlBean)xmlall.elementAt(i );
/**out.println("书名:"+xml.getbookname()+"
");
out.println("作者:"+xml.getauthor()+"
");
out.println("出版社:"+xml.getpub()+"
");
out.println("价格:"+xml.getprice()+"
");
out.println("出版日期:"+xml.getpubdate()+"

");
*/
-->
<!--ml.getbookname(--> <!--ml.getauthor(--> <!--ml.getpub(--> <!--ml.getprice(--> <!--ml.getpubdate(--> &path=<!--at-->">删除


 

<form action="xmlok.jsp" method="post">


<input type="radio" checked="checked" name="act" value="add" />添加资料 <input type="radio" name="act" value="edit" />编辑资料
序 号:

书 名:<input name="bookname" type="text" /><br />
作 者:<input name="author" type="text" /><br />
出版社:<input name="pub" type="text" /><br />
价 格:<input name="price" type="text" /><br />
日 期:<input name="pubdate" type="text" /></p>
<input type="hidden" name="path" value="<%=path%>" />

<input type="submit" name="B1" value="提交" /><input type="reset" name="B2" value="重置" />


</form>





下面是处理上一文件提交的jsp文件:

<!--page contentType="text/html;charset=GBK"-->

 

<!--page language="java" import="xml.*--> <p><br /> <%if(request.getParameter("act")!=null && request.getParameter("act").equals("add")){<br /> XmlBean.AddXML(request);<br /> out.println("</p> <p align="center">

添加成功

返回");
}
else if(request.getParameter("act")!=null && request.getParameter("act").equals("del")){
XmlBean.DelXML(request);
out.println("



删除成功

返回");
}
else if(request.getParameter("act")!=null && request.getParameter("act").equals("edit")){
XmlBean.EditXML(request);
out.println("



修改成功

返回");
}
else{out.print("



非法操作

返回");}

  • 上一篇:没有了
  • 下一篇:没有了
  • 文章评论(查看全部)

    昵 称 *
    电子邮箱 *
    网 址      5 + 1 = ?