| 操作系统 办公 实用知识 设计 开发 WEB开发 移动开发 数据库 软件工程 网管 安全 管理 信息化 答疑 渠道 |
JDOM操作XML文件(法老修正版)这篇文章讲的不错~把JDOM的基本操作实例化了,不过由于当时的作者用的JDOM版本还比较陈旧,所以部分代码会编译出错!支持中文也不好!所以,法老在原作者的基础上对程序做了修改!休正了编译出错以及中文乱码的问题。发表出来,供大家学习和使用。 测试环境:jdom1.0,weblogic 8.1sp2,tomcat 5.0,IE 6。0 /==================================正文开始=======================================/ 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 <书库> <书> <书名>Java编程入门 <作者>张三 <出版社>电子出版社 <价格>35.0 <出版日期>2002-10-07 <书> <书名>XML在Java中的应用 <作者>李四 <出版社>希望出版社 <价格>92.0 <出版日期>2002-10-07 下面是操作XML文件的Bean: XmlBean.java package 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(); } } } } 下面是操作的jsp文件: test.jsp JDOM操作XML文件 读取XML文件中的所有资料 style="border-collapse: collapse" width="80%" id="AutoNumber1"> 书名 作者 出版社 价格 出版日期 操作 style="border-collapse: collapse" width="80%" id="AutoNumber2"> href="xmlaction.jsp?act=del&id=&path=">删除 添加资料 编辑资料 序 号: name="id"> 第条 书 名: 作 者: 出版社: 价 格: 日 期: type="reset" value="重置" name="B2"> 下面是处理上一文件提交的jsp文件: xmlation.jsp
今日推荐
|
重点推荐
领军企业技术文库
+更多领军技术文库
最新专题
电子杂志订阅
| ||||||||