﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-梦在飞-文章分类-JDOM</title><link>http://www.blogjava.net/vso/category/17095.html</link><description>JAVA EE</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 08:18:40 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 08:18:40 GMT</pubDate><ttl>60</ttl><item><title>应用JDOM处理数据库到XML转换的JSP实现</title><link>http://www.blogjava.net/vso/articles/80456.html</link><dc:creator>vso</dc:creator><author>vso</author><pubDate>Fri, 10 Nov 2006 09:33:00 GMT</pubDate><guid>http://www.blogjava.net/vso/articles/80456.html</guid><wfw:comment>http://www.blogjava.net/vso/comments/80456.html</wfw:comment><comments>http://www.blogjava.net/vso/articles/80456.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vso/comments/commentRss/80456.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vso/services/trackbacks/80456.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一、												JDOM																																介绍																																																																																																																...&nbsp;&nbsp;<a href='http://www.blogjava.net/vso/articles/80456.html'>阅读全文</a><img src ="http://www.blogjava.net/vso/aggbug/80456.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vso/" target="_blank">vso</a> 2006-11-10 17:33 <a href="http://www.blogjava.net/vso/articles/80456.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用JDOM操作XML文件</title><link>http://www.blogjava.net/vso/articles/80436.html</link><dc:creator>vso</dc:creator><author>vso</author><pubDate>Fri, 10 Nov 2006 08:48:00 GMT</pubDate><guid>http://www.blogjava.net/vso/articles/80436.html</guid><wfw:comment>http://www.blogjava.net/vso/comments/80436.html</wfw:comment><comments>http://www.blogjava.net/vso/articles/80436.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vso/comments/commentRss/80436.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vso/services/trackbacks/80436.html</trackback:ping><description><![CDATA[Java + XML = JDOM ！ <br />这就是JDOM设计者的目标。如果你曾经使用过烦人的SAX或是DOM来处理XML，你就会知道为什么要有JDOM或者是JAXB。在今年（2002）的JavaOne会议上JDOM的主要创始人Jason Hunter有一篇精彩的演讲介绍了JDOM技术，题目就是JDOM Makes XML Easy。 <br />获得并安装JDOM <br />在http://jdom.org可以下载JDOM的最新版本。以JDOM beta8的2进制版本为例。下载后解压缩，JDOM的jar文件就是build目录下的文件jdom.jar，将之加入类路径。另外JDOM还需要lib目录下那些jar文件如xerces.jar,jaxp.jar的支持。如果在使用中出现以下错误： <br />java.lang.NoSuchMethodError <br />或 <br />java.lang.NoClassDefFoundError: org/xml/sax/SAXNotRecognizedException <br />你需要保证xerces.jar文件在CLASSPATH中位于其他XML类，如JAXP或Crimson之前，这些类文件，包括以前老版本的xerces，可能不支持SAX2.0或DOM Level 2。于是导致了上面的错误。 <br /><br />一个简单的例子 <br />JDOM的处理方式有些类似于DOM，但它主要是用SAX实现的，你不必担心处理速度和内存的问题。另外，JDOM中几乎没有接口，的类全部是实实在在的类，没有类工厂类的。<br /><br />下面是实例用的XML文件:<br /><br />&lt;?xml version="1.0" encoding="GBK"?&gt;<br />&lt;书库&gt;<br />&lt;书&gt;<br />&lt;书名&gt;Java编程入门&lt;/书名&gt;<br />&lt;作者&gt;张三&lt;/作者&gt;<br />&lt;出版社&gt;电子出版社&lt;/出版社&gt;<br />&lt;价格&gt;35.0&lt;/价格&gt;<br />&lt;出版日期&gt;2002-10-07&lt;/出版日期&gt;<br />&lt;/书&gt;<br />&lt;书&gt;<br />&lt;书名&gt;XML在Java中的应用&lt;/书名&gt;<br />&lt;作者&gt;李四&lt;/作者&gt;<br />&lt;出版社&gt;希望出版社&lt;/出版社&gt;<br />&lt;价格&gt;92.0&lt;/价格&gt;<br />&lt;出版日期&gt;2002-10-07&lt;/出版日期&gt;<br />&lt;/书&gt;<br />&lt;/书库&gt;<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&lt;books.size();i++){<br />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 />&lt;%@ page contentType="text/html;charset=GBK" %&gt;<br />&lt;%@ page language="java" import="java.util.*,xml.*"%&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;读取XML文件资料&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;h3 align="center"&gt;JDOM操作XML文件&lt;/h3&gt;<br />&lt;p align="center"&gt;读取XML文件中的所有资料&lt;/p&gt;<br />&lt;center&gt;<br />&lt;table border="1" cellpadding="0" cellspacing="1" style="border-collapse: collapse" width="80%" id="AutoNumber1"&gt;<br />&lt;tr&gt;<br />&lt;td align="center" width="92"&gt;书名&lt;/td&gt;<br />&lt;td align="center" width="92"&gt;作者&lt;/td&gt;<br />&lt;td align="center" width="92"&gt;出版社&lt;/td&gt;<br />&lt;td align="center" width="92"&gt;价格&lt;/td&gt;<br />&lt;td align="center" width="92"&gt;出版日期&lt;/td&gt;<br />&lt;td align="center" width="94"&gt;操作&lt;/td&gt;<br />&lt;/tr&gt;<br />&lt;/table&gt;<br />&lt;%<br />String path = application.getRealPath("/test/xml/")+"testC.xml";<br />XmlBean xml=new XmlBean();<br />Vector xmlall=xml.LoadXML(path);<br />for(int i=0;i&lt;xmlall.size();i++){<br />xml=(XmlBean)xmlall.elementAt(i );<br />/**out.println("书名:"+xml.getbookname()+"&lt;br&gt;");<br />out.println("作者:"+xml.getauthor()+"&lt;br&gt;");<br />out.println("出版社:"+xml.getpub()+"&lt;br&gt;");<br />out.println("价格:"+xml.getprice()+"&lt;br&gt;");<br />out.println("出版日期:"+xml.getpubdate()+"&lt;br&gt;&lt;br&gt;");<br />*/<br />%&gt;<br />&lt;table border="1" cellpadding="0" cellspacing="1" style="border-collapse: collapse" width="80%" id="AutoNumber2"&gt;<br />&lt;tr&gt;<br />&lt;td align="center" width="92"&gt;&lt;%=xml.getbookname()%&gt;&lt;/td&gt;<br />&lt;td align="center" width="92"&gt;&lt;%=xml.getauthor()%&gt;&lt;/td&gt;<br />&lt;td align="center" width="92"&gt;&lt;%=xml.getpub()%&gt;&lt;/td&gt;<br />&lt;td align="center" width="92"&gt;&lt;%=xml.getprice()%&gt;&lt;/td&gt;<br />&lt;td align="center" width="92"&gt;&lt;%=xml.getpubdate()%&gt;&lt;/td&gt;<br />&lt;td align="center" width="94"&gt;&lt;a href="xmlok.jsp?act=del&amp;id=&lt;%=i%&gt;&amp;path=&lt;%=path%&gt;"&gt;删除&lt;/a&gt;&lt;/td&gt;<br />&lt;/tr&gt;<br />&lt;/table&gt;<br />&lt;%}%&gt;<br />&lt;/center&gt;<br />&lt;form method="POST" action="xmlok.jsp"&gt;<br />&lt;p align="center"&gt;<br />&lt;input type="radio" value="add" checked name="act"&gt;添加资料 &lt;input type="radio" value="edit" name="act"&gt;编辑资料<br />序 号:&lt;select size="1" name="id"&gt;<br />&lt;%for(int i=0;i&lt;xmlall.size();i++){%&gt;<br />&lt;option value="&lt;%=i%&gt;"&gt;第&lt;%=i+1%&gt;条&lt;/option&gt;<br />&lt;%}%&gt;<br />&lt;/select&gt;&lt;br&gt;<br />书 名:&lt;input type="text" name="bookname" size="20"&gt;&lt;br&gt;<br />作 者:&lt;input type="text" name="author" size="20"&gt;&lt;br&gt;<br />出版社:&lt;input type="text" name="pub" size="20"&gt;&lt;br&gt;<br />价 格:&lt;input type="text" name="price" size="20"&gt;&lt;br&gt;<br />日 期:&lt;input type="text" name="pubdate" size="20"&gt;&lt;/p&gt;<br />&lt;input type="hidden" name="path" value="&lt;%=path%&gt;"&gt;<br />&lt;p align="center"&gt;&lt;input type="submit" value="提交" name="B1"&gt;&lt;input type="reset" value="重置" name="B2"&gt;&lt;/p&gt;<br />&lt;/form&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /><br />下面是处理上一文件提交的jsp文件:<br />&lt;%@ page contentType="text/html;charset=GBK" %&gt;<br />&lt;%@ page language="java" import="xml.*"%&gt;<br />&lt;%if(request.getParameter("act")!=null &amp;&amp; request.getParameter("act").equals("add")){<br />XmlBean.AddXML(request);<br />out.println("&lt;p align='center'&gt;&lt;br&gt;&lt;br&gt;添加成功&lt;br&gt;&lt;br&gt;&lt;a href=''&gt;返回&lt;/a&gt;");<br />}<br />else if(request.getParameter("act")!=null &amp;&amp; request.getParameter("act").equals("del")){<br />XmlBean.DelXML(request);<br />out.println("&lt;p align='center'&gt;&lt;br&gt;&lt;br&gt;删除成功&lt;br&gt;&lt;br&gt;&lt;a href=''&gt;返回&lt;/a&gt;");<br />}<br />else if(request.getParameter("act")!=null &amp;&amp; request.getParameter("act").equals("edit")){<br />XmlBean.EditXML(request);<br />out.println("&lt;p align='center'&gt;&lt;br&gt;&lt;br&gt;修改成功&lt;br&gt;&lt;br&gt;&lt;a href=''&gt;返回&lt;/a&gt;");<br />}<br />else{out.print("&lt;p align='center'&gt;&lt;br&gt;&lt;br&gt;非法操作&lt;br&gt;&lt;br&gt;&lt;a href=''&gt;返回&lt;/a&gt;");}<img src ="http://www.blogjava.net/vso/aggbug/80436.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vso/" target="_blank">vso</a> 2006-11-10 16:48 <a href="http://www.blogjava.net/vso/articles/80436.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDOM的使用</title><link>http://www.blogjava.net/vso/articles/80433.html</link><dc:creator>vso</dc:creator><author>vso</author><pubDate>Fri, 10 Nov 2006 08:32:00 GMT</pubDate><guid>http://www.blogjava.net/vso/articles/80433.html</guid><wfw:comment>http://www.blogjava.net/vso/comments/80433.html</wfw:comment><comments>http://www.blogjava.net/vso/articles/80433.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vso/comments/commentRss/80433.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vso/services/trackbacks/80433.html</trackback:ping><description><![CDATA[ 一、JDOM简介<br />JDOM是一个开源项目，它基于树型结构，利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。<br />JDOM直接为JAVA编程服务。它利用更为强有力的JAVA语言的诸多特性（方法重载、集合概念以及映射），把SAX和DOM的功能有效地结合起来。<br />在使用设计上尽可能地隐藏原来使用XML过程中的复杂性。利用JDOM处理XML文档将是一件轻松、简单的事。<br />JDOM在2000年的春天被BrettMcLaughlin和JasonHunter开发出来，以弥补DOM及SAX在实际应用当中的不足之处。<br />这些不足之处主要在于SAX没有文档修改、随机访问以及输出的功能，而对于DOM来说，JAVA程序员在使用时来用起来总觉得不太方便。<br />DOM的缺点主要是来自于由于Dom是一个接口定义语言（IDL）,它的任务是在不同语言实现中的一个最低的通用标准，并不是为JAVA特别设计的。JDOM的最新版本为JDOMBeta9。最近JDOM被收录到JSR-102内，这标志着JDOM成为了JAVA平台组成的一部分。<br />二、JDOM包概览<br />JDOM是由以下几个包组成的<br />org.jdom               包含了所有的xml文档要素的java类<br /> <br />org.jdom.adapters        包含了与dom适配的java类<br /> <br />org.jdom.filter           包含了xml文档的过滤器类<br /> <br />org.jdom.input           包含了读取xml文档的类<br /> <br />org.jdom.output          包含了写入xml文档的类<br /> <br />org.jdom.transform       包含了将jdomxml文档接口转换为其他xml文档接口<br /> <br />org.jdom.xpath           包含了对xml文档xpath操作的类<br />三、JDOM类说明<br />1、org.JDOM这个包里的类是你J解析xml文件后所要用到的所有数据类型。<br />Attribute<br />CDATA<br />Coment<br />DocType<br />Document<br />Element<br />EntityRef<br />Namespace<br />ProscessingInstruction<br />Text<br />2、org.JDOM.transform在涉及xslt格式转换时应使用下面的2个类<br />JDOMSource<br />JDOMResult<br />org.JDOM.input<br />3、输入类，一般用于文档的创建工作<br />SAXBuilder<br />DOMBuilder<br />ResultSetBuilder<br />4、org.JDOM.output输出类，用于文档转换输出<br />XMLOutputter<br />SAXOutputter<br />DomOutputter<br />JTreeOutputter<br />使用前注意事项：<br />1.JDOM对于JAXP以及TRax的支持<br />JDOM支持JAXP1.1：你可以在程序中使用任何的parser工具类,默认情况下是JAXP的parser。<br />制定特别的parser可用如下形式<br />SAXBuilder parser<br /> =new SAXBuilder("org.apache.crimson.parser.XMLReaderImpl");<br /> Document doc=parser.build("http://www.cafeconleche.org/");<br /> //work with the document...<br />JDOM也支持TRaX：XSLT可通过JDOMSource以及JDOMResult类来转换（参见以后章节）<br />2.注意在JDOM里文档（Document）类由org.JDOM.Document来表示。这要与org.w3c.dom中的Document区别开，这2种格式如何转换在后面会说明。<br />以下如无特指均指JDOM里的Document。<br />四、JDOM主要使用方法<br />1.Ducument类<br />(1)Document的操作方法：<br />Element root=new Element("GREETING");<br />Document doc=new Document(root);<br />root.setText("Hello JDOM!");<br />或者简单的使用Document doc=new Document(new Element("GREETING").setText("HelloJDOM!t"));<br />这点和DOM不同。Dom则需要更为复杂的代码，如下：<br />DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();<br />DocumentBuilder builder=factory.newDocumentBuilder();<br />Document doc=builder.newDocument();<br />Element root=doc.createElement("root");<br />Text text=doc.createText("This is the root");<br />root.appendChild(text);<br />doc.appendChild(root);<br />注意事项：JDOM不允许同一个节点同时被2个或多个文档相关联，要在第2个文档中使用原来老文档中的节点的话。首先需要使用detach()把这个节点分开来。<br />(2)从文件、流、系统ID、URL得到Document对象：<br />DOMBuilder builder=new DOMBuilder();<br />Document doc=builder.build(new File("jdom_test.xml"));<br />SAXBuilder builder=new SAXBuilder();<br />Document doc=builder.build(url);<br />在新版本中DOMBuilder已经Deprecated掉DOMBuilder.builder(url)，用SAX效率会比较快。<br />这里举一个小例子，为了简单起见，使用String对象直接作为xml数据源：<br /> Public jdomTest(){<br />   String textXml=null;<br />   textXml="&lt;note&gt;";<br />   textXml=textXml+<br />       "&lt;to&gt;aaa&lt;/to&gt;&lt;from&gt;bbb&lt;/from&gt;&lt;heading&gt;ccc&lt;/heading&gt;&lt;body&gt;ddd&lt;/body&gt;";<br />   textXml=textXml+"&lt;/note&gt;";<br />   SAXBuilderbuilder=newSAXBuilder();<br />   Document doc=null;<br />   Reader in=new StringReader(textXml);<br />   try{<br />     doc=builder.build(in);<br />     Element root=doc.getRootElement();<br />     List ls=root.getChildren();//注意此处取出的是root节点下面的一层的Element集合<br />     for(Iterator iter=ls.iterator();iter.hasNext();){<br />       Element el=(Element)iter.next();<br />       if(el.getName().equals("to")){<br />        System.out.println(el.getText());<br />       }<br />     }<br />   }<br />   catch(IOException ex){<br />     ex.printStackTrace();<br />   }<br />   catch(JDOMException ex){<br />     ex.printStackTrace();<br />   }<br /> }<br />(3)DOM的document和JDOM的Document之间的相互转换使用方法，简单！<br />DOMBuilder builder=new DOMBuilder();<br />org.jdom.Document jdomDocument=builder.build(domDocument);<br />DOMOutputter converter=new DOMOutputter();//workwiththeJDOMdocument…<br />org.w3c.dom.Document domDocument=converter.output(jdomDocument);<br />//workwiththeDOMdocument…<br />2.XML文档输出<br />XMLOutPutter类：<br />JDOM的输出非常灵活,支持很多种io格式以及风格的输出<br />Document doc=newDocument(...);<br />XMLOutputter outp=new XMLOutputter();<br />outp.output(doc,fileOutputStream);//Rawoutput<br />outp.setTextTrim(true);//Compressed output<br />outp.output(doc,socket.getOutputStream());<br />outp.setIndent("");//Pretty output<br />outp.setNewlines(true);<br />outp.output(doc,System.out);<br />详细请参阅最新的JDOMAPI手册<br />3.Element类：<br />(1)浏览Element树<br />Element root=doc.getRootElement();//获得根元素element<br />List allChildren=root.getChildren();//获得所有子元素的一个list<br />List namedChildren=root.getChildren("name");//获得指定名称子元素的list<br />Element child=root.getChild("name");//获得指定名称的第一个子元素<br />JDOM给了我们很多很灵活的使用方法来管理子元素（这里的List是java.util.List）<br />List allChildren=root.getChildren();<br />allChildren.remove(3);//删除第四个子元素<br />allChildren.removeAll(root.getChildren("jack"));//删除叫“jack”的子元素<br />root.removeChildren("jack");//便捷写法<br />allChildren.add(newElement("jane"));//加入<br />root.addContent(newElement("jane"));//便捷写法<br />allChildren.add(0,newElement("first"));<br />(2)移动Elements:<br />在JDOM里很简单<br />Element movable=new Element("movable");<br />parent1.addContent(movable);//place<br />parent1.removeContent(movable);//remove<br />parent2.addContent(movable);//add<br />在Dom里<br />Element movable=doc1.createElement("movable");<br />parent1.appendChild(movable);//place<br />parent1.removeChild(movable);//remove<br />parent2.appendChild(movable);//出错!<br />补充：纠错性<br />JDOM的Element构造函数（以及它的其他函数）会检查element是否合法。<br />而它的add/remove方法会检查树结构，检查内容如下：<br />1.在任何树中是否有回环节点<br />2.是否只有一个根节点<br />3.是否有一致的命名空间（Namespaces）<br />(3)Element的text内容读取<br />&lt;description&gt;<br />A cool demo<br />&lt;/description&gt;<br />//The text is directly available<br />//Returns"\n A cool demo\n"<br />String desc=element.getText();<br />//There's a convenient short cut<br />//Returns "A cool demo"<br />String desc=element.getTextTrim();<br />(4)Elment内容修改<br />element.setText("Anewdescription");<br />3.可正确解释特殊字符<br />element.setText("&lt;xml&gt;content");<br />4.CDATA的数据写入、读出<br />element.addContent(newCDATA("&lt;xml&gt;content"));<br />String noDifference=element.getText();<br />混合内容<br />element可能包含很多种内容，比如说<br />&lt;table&gt;<br />&lt;!?Some comment--&gt;<br />Some text<br />&lt;tr&gt;Some child element&lt;/tr&gt;<br />&lt;/table&gt;<br />取table的子元素tr<br />String text=table.getTextTrim();<br />Element tr=table.getChild("tr");<br />也可使用另外一个比较简单的方法<br />List mixedCo=table.getContent();<br />Iterator itr=mixedCo.iterator();<br />while(itr.hasNext()){<br />Objecto=i.next();<br />if(o instanceof Comment){...}<br />//这里可以写成Comment,Element,Text,CDATA,ProcessingInstruction,或者是EntityRef的类型<br />}<br />//现在移除Comment,注意这里游标应为1。这是由于回车键也被解析成Text类的缘故,所以Comment项应为1。<br />mixedCo.remove(1);<br />4.Attribute类<br />&lt;table width="100%" border="0"&gt;&lt;/table&gt;<br />String width=table.getAttributeValue("width");//获得attribute<br />Int border=table.getAttribute("border").getIntValue();<br />table.setAttribute("vspace","0");//设置attribute<br />table.removeAttribute("vspace");//删除一个或全部attribute<br />table.getAttributes().clear();<br />5.处理指令(ProcessingInstructions)操作<br />一个Pls的例子<br />&lt;?br?&gt;<br />&lt;?cocoon-processtype="xslt"?&gt;<br />         |       |<br />         |       |<br />       目标    数据<br />处理目标名称(Target)<br />String target=pi.getTarget();<br />获得所有数据（data），在目标（target）以后的所有数据都会被返回。<br />String data=pi.getData();<br />String type=pi.getValue("type");获得指定属性的数据<br />List ls=pi.getNames();获得所有属性的名称<br />6.命名空间操作<br />&lt;xhtml:html<br /> xmlns:xhtml="http://www.w3.org/1999/xhtml"&gt;<br />&lt;xhtml:title&gt;HomePage&lt;/xhtml:title&gt;<br />&lt;/xhtml:html&gt;<br />Namespace xhtml=Namespace.getNamespace("xhtml","http://www.w3.org/1999/xhtml");<br />List kids=html.getChildren("title",xhtml);<br />Element kid=html.getChild("title",xhtml);<br />kid.addContent(newElement("table",xhtml));<br />7.XSLT格式转换<br />使用以下函数可对XSLT转换<br />最后如果你需要使用w3c的Document则需要转换一下。<br />Public static Document transform(String stylesheet，Document in)<br />                                       Throws JDOMException{<br />    try{<br />      Transformer transformer=TransformerFactory.newInstance()<br />                            .new Transformer(newstreamSource(stylesheet));<br />      JDOMResult out=new JDOMResult();<br />      transformer.transform(newJDOMSource(in),out);<br />      return out.getDocument();<br />    }<br />    catch(TransformerException e){<br />      throw newJDOMException("XSLT Trandformation failed",e);<br />    }<br />  }<br />五、用例:<br />1、生成xml文档：<br /> <br /> <br />Public class WriteXML{<br />   Public void BuildXML() throws Exception{<br />       Element root,student,number,name,age;        <br />       root=new Element("student-info");//生成根元素：student-info<br />       student=new Element("student");//生成元素：student(number,name,age)                            <br />       number=new Element("number");<br />       name=new Element("name");<br />       age=new Element("age");<br />       Document doc=new Document(root);//将根元素植入文档doc中<br />       number.setText("001");<br />       name.setText("lnman");<br />       age.setText("24");<br />       student.addContent(number);<br />       student.addContent(name);<br />       student.addContent(age);<br />       root.addContent(student);<br />       Format format=Format.getCompactFormat();<br />       format.setEncoding("gb2312");//设置xml文件的字符为gb2312<br />       format.setIndent("   ");//设置xml文件的缩进为4个空格<br />       XMLOutputterXML Out=new XMLOutputter(format);//元素后换行一层元素缩四格<br />       XMLOut.output(doc,new FileOutputStream("studentinfo.xml")); <br />}<br />   Public static void main(String[] args) throws Exception{<br />       WriteXML w=new WriteXML();<br />       System.out.println("NowwebuildanXMLdocument.....");<br />       w.BuildXML();<br />       System.out.println("finished!");<br />}<br />}<br />生成的xml文档为：<br />&lt;?xmlversion="1.0"encoding="gb2312"?&gt;<br />&lt;student-info&gt;<br />   &lt;student&gt;<br />       &lt;number&gt;001&lt;/number&gt;<br />       &lt;name&gt;lnman&lt;/name&gt;<br />       &lt;age&gt;24&lt;/age&gt;<br />   &lt;/student&gt;<br />&lt;/student-info&gt;<br /> <br /> <br />创建XML文档2：<br /> Public class CreateXML{<br /> Public void Create(){<br />  try{<br />   Document doc=new Document();  <br />   ProcessingInstruction pi=new ProcessingInstruction("xml-stylesheet","type="text/xsl"href="test.xsl"");<br />   doc.addContent(pi);   <br />   Namespace ns=Namespace.getNamespace("http://www.bromon.org");<br />   Namespace ns2=Namespace.getNamespace("other","http://www.w3c.org");<br />   Element root=new Element("根元素",ns);<br />   root.addNamespaceDeclaration(ns2);<br />   doc.setRootElement(root);<br />   Elemente l1=new Element("元素一");<br />   el1.setAttribute("属性","属性一");   <br />   Text text1=new Text("元素值");<br />            Element em=new Element("元素二").addContent("第二个元素");<br />   el1.addContent(text1);<br />            el1.addContent(em);            <br />            Elementel2=newElement("元素三").addContent("第三个元素");<br />            root.addContent(el1);<br />            root.addContent(el2);            <br />            //缩进四个空格,自动换行,gb2312编码<br />            XMLOutputter outputter=new XMLOutputter(" ",true,"GB2312");<br />            outputter.output(doc,newFileWriter("test.xml"));<br />        }catch(Exceptione) {<br />         System.out.println(e);<br />        }<br />    }    <br />    Public static void main(String args[]){<br />     New CreateXML().Create();<br />    }    <br /> }<br />2、读取xml文档的例子：<br />importorg.jdom.output.*;<br />importorg.jdom.input.*;<br />importorg.jdom.*;<br />importjava.io.*;<br />importjava.util.*;<br />public class ReadXML{<br />   public static void main(String[] args) throws Exception{<br />       SAXBuilder builder=new SAXBuilder();<br />       Document read_doc=builder.build("studentinfo.xml");<br />       Element stu=read_doc.getRootElement();<br />       List list=stu.getChildren("student");<br />       for(int i=0;i&lt;list.size();i++){<br />           Element e=(Element)list.get(i);<br />           String str_number=e.getChildText("number");<br />           String str_name=e.getChildText("name");<br />           String str_age=e.getChildText("age");<br />           System.out.println("---------STUDENT--------------");<br />           System.out.println("NUMBER:"+str_number);<br />           System.out.println("NAME:"+str_name);<br />           System.out.println("AGE:"+str_age);<br />           System.out.println("------------------------------");<br />           System.out.println();<br />       } <br />      }<br />}<br />3、DTD验证的：<br /> Public class XMLWithDTD{<br /> Public void validate() {<br />  try{<br />   SAXBuilder builder=new SAXBuilder(true);<br />   builder.setFeature("http://xml.org/sax/features/validation";,true);<br />   Document doc=builder.build(newFileReader("author.xml"));   <br />   System.out.println("搞掂");<br />   XMLOutputter outputter=new XMLOutputter();<br />   outputter.output(doc,System.out);<br />  }catch(Exceptione){<br />   System.out.println(e);<br />  }  <br /> }<br /> Public static void main(String args[]){<br />  new XMLWithDTD().validate();<br /> } <br /> }<br /> 需要说明的是，这个程序没有指明使用哪个DTD文件。DTD文件的位置是在XML中指定的，而且DTD不支持命名空间，一个XML只能引用一个DTD，所以程序直接读取XML中指定的DTD，程序本身不用指定。不过这样一来，好象就只能使用外部式的DTD引用方式了？高人指点。<br /> <br /> <br />4、XMLSchema验证的：<br /> Public classXMLWithSchema{<br /> String xml="test.xml";<br /> String schema="test-schema.xml";<br /> Public void validate(){<br />  try{<br />   SAXBuilder builder=new SAXBuilder(true);<br />   //指定约束方式为XMLschema<br />   builder.setFeature("http://apache.org/xml/features/validation/schema";, true);<br />   //导入schema文件<br />builder.setProperty("http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation";,schema);<br />   Document doc=builder.build(new FileReader(xml));   <br />   System.out.println("搞掂");<br />   XMLOutputter outputter=new XMLOutputter();<br />   outputter.output(doc,System.out);<br />  }catch(Exceptione){<br />   System.out.println("验证失败:"+e);<br />  } <br /> }<br /> }<br /> 上面的程序就指出了要引入的XMLSchema文件的位置。<br /> <br /> <br /> 系统默认输出是UTF-8，这有可能导致出现乱码。<br />5、Xpath例子：<br />JDOM的关于XPATH的api在org.jdom.xpath这个包里。这个包下，有一个抽象类XPath.java和实现类JaxenXPath.java，使用时先用XPath类的静态方法newInstance(Stringxpath)得到XPath对象，然后调用它的selectNodes(Objectcontext)方法或selectSingleNode(Objectcontext)方法，前者根据xpath语句返回一组节点(List对象)；后者根据一个xpath语句返回符合条件的第一个节点(Object类型)。请看jdom-1.0自带的范例程序：<br />    它分析在web.xml文件中的注册的servlet的个数及参数个数，并输出角色名。<br />web.xml文件：<br />&lt;?xmlversion="1.0"encoding="ISO-8859-1"?&gt;<br />&lt;!--<br />&lt;!DOCTYPEweb-app<br />   PUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.2//EN"<br />   "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd"&gt;<br />--&gt;<br />&lt;web-app&gt;<br />   &lt;servlet&gt;<br />       &lt;servlet-name&gt;snoop&lt;/servlet-name&gt;<br />       &lt;servlet-class&gt;SnoopServlet&lt;/servlet-class&gt;<br />   &lt;/servlet&gt;<br />   &lt;servlet&gt;<br />       &lt;servlet-name&gt;file&lt;/servlet-name&gt;<br />       &lt;servlet-class&gt;ViewFile&lt;/servlet-class&gt;<br />       &lt;init-param&gt;<br />           &lt;param-name&gt;initial&lt;/param-name&gt;<br />           &lt;param-value&gt;1000&lt;/param-value&gt;<br />           &lt;description&gt;Theinitialvalueforthecounter &lt;!--optional--&gt;&lt;/description&gt;<br />       &lt;/init-param&gt;<br />   &lt;/servlet&gt;<br />   &lt;servlet-mapping&gt;<br />       &lt;servlet-name&gt;mv&lt;/servlet-name&gt;<br />       &lt;url-pattern&gt;*.wm&lt;/url-pattern&gt;<br />   &lt;/servlet-mapping&gt;<br />   &lt;distributed/&gt;<br />   &lt;security-role&gt;<br />     &lt;role-name&gt;manager&lt;/role-name&gt;<br />     &lt;role-name&gt;director&lt;/role-name&gt;<br />     &lt;role-name&gt;president&lt;/role-name&gt;<br />   &lt;/security-role&gt;<br />&lt;/web-app&gt;<br />处理程序：<br />importjava.io.*;<br />importjava.util.*; <br />publicclassXPathReader{     <br />   publicstaticvoidmain(String[]args)throwsIOException,JDOMException{<br />       if(args.length!=1){<br />           System.err.println("Usage:javaXPathReaderweb.xml");<br />           return;<br />       }<br />       Stringfile name=args[0];//从命令行输入web.xml<br />       PrintStream out=System.out;<br />       SAXBuilder builder=new SAXBuilder();<br />       Document doc=builder.build(new File(filename));//得到Document对象<br /> <br /> <br />       //Printservletinformation<br />       XPath servletPath=XPath.newInstance("//servlet");//,选择任意路径下servlet元素<br />       List servlets=servletPath.selectNodes(doc);//返回所有的servlet元素。<br />       out.println("This WAR has"+servlets.size()+"registered servlets:");<br />       Iterator i=servlets.iterator();<br />       while(i.hasNext()){//输出servlet信息<br />           Element servlet=(Element)i.next();<br />           out.print("\t"+servlet.getChild("servlet-name")<br />                                   .getTextTrim()+<br />                     "for"+servlet.getChild("servlet-class")<br />                                      .getTextTrim());<br />           List initParams=servlet.getChildren("init-param");<br />           out.println("(it has"+initParams.size()+"initparams)"); <br />       }             <br />       //Printsecurityroleinformation<br />       XPath rolePath=XPath.newInstance("//security-role/role-name/text()");<br />       List roleNames=rolePath.selectNodes(doc);//得到所有的角色名<br />       if(roleNames.size()==0){<br />           out.println("This WAR contains no roles");<br />       }else{<br />           out.println("This WAR contains"+roleNames.size()+"roles:");<br />           i=roleNames.iterator();<br />           while(i.hasNext()){//输出角色名<br />               out.println("\t"+((Text)i.next()).getTextTrim());<br />           }<br />       }<br />   }    <br />}<br /> <br /> <br />输出结果:<br />C:\java&gt;java  XPathReaderweb.xml<br />ThisWARhas2registeredservlets:<br />       snoopforSnoopServlet(ithas0initparams)<br />       fileforViewFile(ithas1initparams)<br />ThisWARcontains3roles:<br />       manager<br />       director<br />       president<br /> <br /> <br />6、数据输入要用到XML文档要通过org.jdom.input包，反过来需要org.jdom.output。如前面所说，关是看API文档就能够使用。<br />我们的例子读入XML文件exampleA.xml，加入一条处理指令，修改第一本书的价格和作者，并添加一条属性，然后写入文件exampleB.xml：<br />//exampleA.xml<br />&lt;?xmlversion="1.0"encoding="GBK"?&gt;<br />&lt;bookList&gt;<br />&lt;book&gt;<br />&lt;name&gt;Java编程入门&lt;/name&gt;<br />&lt;author&gt;张三&lt;/author&gt;<br />&lt;publishDate&gt;2002-6-6&lt;/publishDate&gt;<br />&lt;price&gt;35.0&lt;/price&gt;<br />&lt;/book&gt;<br />&lt;book&gt;<br />&lt;name&gt;XML在Java中的应用&lt;/name&gt;<br />&lt;author&gt;李四&lt;/author&gt;<br />&lt;publishDate&gt;2002-9-16&lt;/publishDate&gt;<br />&lt;price&gt;92.0&lt;/price&gt;<br />&lt;/book&gt;<br />&lt;/bookList&gt;<br />//testJDOM.java<br />importorg.jdom.*;<br />importorg.jdom.output.*;<br />importorg.jdom.input.*;<br />importjava.io.*;<br />publicclassTestJDOM{<br />publicstaticvoidmain(Stringargs[])throwsException{<br />SAXBuildersb=newSAXBuilder();<br />//从文件构造一个Document，因为XML文件中已经指定了编码，所以这里不必了<br />Documentdoc=sb.build(newFileInputStream("exampleA.xml"));<br />ProcessingInstructionpi=newProcessingInstruction//加入一条处理指令<br />("xml-stylesheet","href=\"bookList.html.xsl\"type=\"text/xsl\"");<br />doc.addContent(pi);<br />Elementroot=doc.getRootElement();//得到根元素<br />java.util.Listbooks=root.getChildren();//得到根元素所有子元素的集合<br />Elementbook=(Element)books.get(0);//得到第一个book元素<br />//为第一本书添加一条属性<br />Attributea=newAttribute("hot","true");<br />book.setAttribute(a);<br />Elementauthor=book.getChild("author");//得到指定的字元素<br />author.setText("王五");//将作者改为王五<br />//或Textt=newText("王五");book.addContent(t);<br />Elementprice=book.getChild("price");//得到指定的字元素<br />//修改价格，比较郁闷的是我们必须自己转换数据类型，而这正是JAXB的优势<br />author.setText(Float.toString(50.0f));<br />Stringindent="";<br />booleannewLines=true;<br />XMLOutputteroutp=newXMLOutputter(indent,newLines,"GBK");<br />outp.output(doc,newFileOutputStream("exampleB.xml"));<br />}<br />};<br />执行结果exampleB.xml：<br />&lt;?xmlversion="1.0"encoding="GBK"?&gt;<br />&lt;bookList&gt;<br />&lt;bookhot=”true”&gt;<br />&lt;name&gt;Java编程入门&lt;/name&gt;<br />&lt;author&gt;50.0&lt;/author&gt;<br />&lt;publishDate&gt;2002-6-6&lt;/publishDate&gt;<br />&lt;price&gt;35.0&lt;/price&gt;<br />&lt;/book&gt;<br />&lt;book&gt;<br />&lt;name&gt;XML在Java中的应用&lt;/name&gt;<br />&lt;author&gt;李四&lt;/author&gt;<br />&lt;publishDate&gt;2002-9-16&lt;/publishDate&gt;<br />&lt;price&gt;92.0&lt;/price&gt;<br />&lt;/book&gt;<br />&lt;/bookList&gt;<br />&lt;?xml-stylesheethref="bookList.html.xsl"type="text/xsl"?&gt;<br />在默认情况下，JDOM的Element类的getText()这类的方法不会过滤空白字符，如果你需要过滤，用setTextTrim().<br /><img src ="http://www.blogjava.net/vso/aggbug/80433.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vso/" target="_blank">vso</a> 2006-11-10 16:32 <a href="http://www.blogjava.net/vso/articles/80433.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>