ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>色综合综合色,动漫成人在线,av影片免费在线观看http://www.aygfsteel.com/vso/category/17095.htmlJAVA EEzh-cnWed, 28 Feb 2007 08:18:40 GMTWed, 28 Feb 2007 08:18:40 GMT60- 应用JDOMå¤„ç†æ•°æ®åº“到XML转æ¢çš„JSP实现http://www.aygfsteel.com/vso/articles/80456.htmlvsovsoFri, 10 Nov 2006 09:33:00 GMThttp://www.aygfsteel.com/vso/articles/80456.htmlhttp://www.aygfsteel.com/vso/comments/80456.htmlhttp://www.aygfsteel.com/vso/articles/80456.html#Feedback0http://www.aygfsteel.com/vso/comments/commentRss/80456.htmlhttp://www.aygfsteel.com/vso/services/trackbacks/80456.html阅读全文

]]> - 用JDOMæ“作XMLæ–‡äšghttp://www.aygfsteel.com/vso/articles/80436.htmlvsovsoFri, 10 Nov 2006 08:48:00 GMThttp://www.aygfsteel.com/vso/articles/80436.htmlhttp://www.aygfsteel.com/vso/comments/80436.htmlhttp://www.aygfsteel.com/vso/articles/80436.html#Feedback0http://www.aygfsteel.com/vso/comments/commentRss/80436.htmlhttp://www.aygfsteel.com/vso/services/trackbacks/80436.html˜q™å°±æ˜¯JDOMè®¾è®¡è€…çš„ç›®æ ‡ã€‚å¦‚æžœä½ æ›„¡»ä½¿ç”¨˜q‡çƒ¦äººçš„SAX或是DOMæ¥å¤„ç†XMLåQŒä½ ž®×ƒ¼šçŸ¥é“ä¸ÞZ»€ä¹ˆè¦æœ‰JDOM或者是JAXB。在今年åQ?002åQ‰çš„JavaOne会议上JDOM的主è¦åˆ›å§‹ähJason Hunter有一½‹‡ç²¾å½©çš„æ¼”讲介ç»äº†JDOM技术,题目ž®±æ˜¯JDOM Makes XML Easy。Â?br />获得òq¶å®‰è£…JDOMÂ
在http://jdom.orgå¯ä»¥ä¸‹è²JDOM的最新版本。以JDOM beta8çš?˜q›åˆ¶ç‰ˆæœ¬ä¸ÞZ¾‹ã€‚下载åŽè§£åŽ‹¾~©ï¼ŒJDOMçš„jaræ–‡äšgž®±æ˜¯build目录下的文äšgjdom.jaråQŒå°†ä¹‹åŠ å…¥ç±»è·¯å¾„ã€‚å¦å¤–JDOM˜q˜éœ€è¦lib目录下那些jaræ–‡äšg如xerces.jar,jaxp.jar的支æŒã€‚如果在使用ä¸å‡ºçŽîC»¥ä¸‹é”™è¯¯ï¼šÂ
java.lang.NoSuchMethodErrorÂ
或Â?br />java.lang.NoClassDefFoundError: org/xml/sax/SAXNotRecognizedExceptionÂ
ä½ éœ€è¦ä¿è¯xerces.jaræ–‡äšg在CLASSPATHä¸ä½äºŽå…¶ä»–XML¾c»ï¼Œå¦‚JAXP或Crimson之å‰åQŒè¿™äº›ç±»æ–‡äšgåQŒåŒ…括以å‰è€ç‰ˆæœ¬çš„xercesåQŒå¯èƒ½ä¸æ”¯æŒSAX2.0或DOM Level 2。于是导致了上é¢çš„错误。Â?br />
一个简å•的例åÂ
JDOMçš„å¤„ç†æ–¹å¼æœ‰äº›ç±»ä¼égºŽDOMåQŒä½†å®ƒä¸»è¦æ˜¯ç”¨SAXå®žçŽ°çš„ï¼Œä½ ä¸å¿…担心处ç†é€Ÿåº¦å’Œå†…å˜çš„问题。å¦å¤–,JDOMä¸å‡ 乎没有接å£ï¼Œçš„类全部是实实在在的¾c»ï¼Œæ²¡æœ‰¾cÕd·¥åŽ‚ç±»çš„ã€?br />
䏋颿˜¯å®žä¾‹ç”¨çš„XMLæ–‡äšg:
<?xml version="1.0" encoding="GBK"?>
<书库>
<ä¹?gt;
<书å>Java¾~–程入门</书å>
<作è€?gt;å¼ ä¸‰</作è€?gt;
<出版½C?gt;电å出版½C?lt;/出版½C?gt;
<ä»äh ¼>35.0</ä»äh ¼>
<出版日期>2002-10-07</出版日期>
</ä¹?gt;
<ä¹?gt;
<书å>XML在Javaä¸çš„应用</书å>
<作è€?gt;æŽå››</作è€?gt;
<出版½C?gt;希望出版½C?lt;/出版½C?gt;
<ä»äh ¼>92.0</ä»äh ¼>
<出版日期>2002-10-07</出版日期>
</ä¹?gt;
</书库>
䏋颿˜¯æ“作XMLæ–‡äšgçš„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(){}
/**
* è¯Õd–XMLæ–‡äšg所有信æ?br />*/
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(); //å¾—åˆ°æ ¹å…ƒç´?br />List books = root.getChildren(); //å¾—åˆ°æ ¹å…ƒç´ æ‰€æœ‰åå…ƒç´ çš„é›†å?br />Element book =null;
XmlBean xml =null;
for(int i=0;i<books.size();i++){
xml = new XmlBean();
book = (Element)books.get(i ); //得到½W¬ä¸€æœ¬ä¹¦å…ƒç´
xml.setbookname(book.getChild("书å").getText());
xml.setauthor(book.getChild("作�).getText());
xml.setpub(book.getChild("出版½C?).getText());
xml.setprice(book.getChild("ä»äh ¼").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æ–‡äšg指定信æ¯
*/
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(); //å¾—åˆ°æ ¹å…ƒç´?br />List books = root.getChildren(); //å¾—åˆ°æ ¹å…ƒç´ æ‰€æœ‰åå…ƒç´ çš„é›†å?br />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();
}
}
}
/**
* æ·ÕdŠ XMLæ–‡äšg指定信æ¯
*/
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(); //å¾—åˆ°æ ¹å…ƒç´?br />List books = root.getChildren(); //å¾—åˆ°æ ¹å…ƒç´ æ‰€æœ‰åå…ƒç´ çš„é›†å?br />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("出版½C?);
newpub.setText(pub);
newbook.addContent(newpub);
Element newprice= new Element("ä»äh ¼");
newprice.setText(price);
newbook.addContent(newprice);
Element newdate= new Element("出版日期");
newdate.setText(pubdate);
newbook.addContent(newdate);
books.add(newbook);//å¢žåŠ åå…ƒç´?br />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æ–‡äšg指定信æ¯
*/
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(); //å¾—åˆ°æ ¹å…ƒç´?br />List books = root.getChildren(); //å¾—åˆ°æ ¹å…ƒç´ æ‰€æœ‰åå…ƒç´ çš„é›†å?br />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);//修改书å为新的书å?br />Element newauthor= book.getChild("作è€?);
newauthor.setText(author);
Element newpub= book.getChild("出版½C?);
newpub.setText(pub);
Element newprice= book.getChild("ä»äh ¼");
newprice.setText(price);
Element newdate= book.getChild("出版日期");
newdate.setText(pubdate);
//books.set(xmlid,book);//修改åå…ƒç´?br />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æ–‡äšg:
<%@ page contentType="text/html;charset=GBK" %>
<%@ page language="java" import="java.util.*,xml.*"%>
<html>
<head>
<title>è¯Õd–XMLæ–‡äšg资料</title>
</head>
<body>
<h3 align="center">JDOMæ“作XMLæ–‡äšg</h3>
<p align="center">è¯Õd–XMLæ–‡äšgä¸çš„æ‰€æœ‰èµ„æ–?lt;/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">作�lt;/td>
<td align="center" width="92">出版½C?lt;/td>
<td align="center" width="92">ä»äh ¼</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("出版½C?"+xml.getpub()+"<br>");
out.println("ä»äh ¼:"+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">æ·ÕdŠ èµ„æ–™Â <input type="radio" value="edit" name="act">¾~–辑资料
åºÂ å·:<select size="1" name="id">
<%for(int i=0;i<xmlall.size();i++){%>
<option value="<%=i%>">½W?lt;%=i+1%>æ?lt;/option>
<%}%>
</select><br>
书 å:<input type="text" name="bookname" size="20"><br>
作 �<input type="text" name="author" size="20"><br>
出版½C?<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>
䏋颿˜¯å¤„ç†ä¸Šä¸€æ–‡äšgæäº¤çš„jspæ–‡äšg:
<%@ 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>æ·ÕdŠ æˆåŠŸ<br><br><a href=''>˜q”回</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=''>˜q”回</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=''>˜q”回</a>");
}
else{out.print("<p align='center'><br><br>éžæ³•æ“作<br><br><a href=''>˜q”回</a>");}
]]> - JDOMçš„ä‹Éç”?/title>http://www.aygfsteel.com/vso/articles/80433.htmlvsovsoFri, 10 Nov 2006 08:32:00 GMThttp://www.aygfsteel.com/vso/articles/80433.htmlhttp://www.aygfsteel.com/vso/comments/80433.htmlhttp://www.aygfsteel.com/vso/articles/80433.html#Feedback0http://www.aygfsteel.com/vso/comments/commentRss/80433.htmlhttp://www.aygfsteel.com/vso/services/trackbacks/80433.htmlJDOM是一个开æºé¡¹ç›®ï¼Œå®ƒåŸºäºŽæ ‘型结构,利用¾U¯JAVA的技术对XML文档实现解æžã€ç”Ÿæˆã€åºåˆ—化以åŠå¤šç§æ“作ã€?br />JDOM直接为JAVA¾~–程æœåŠ¡ã€‚å®ƒåˆ©ç”¨æ›´äØ“å¼ºæœ‰åŠ›çš„JAVAè¯è¨€çš„诸多特性(æ–ÒŽ³•é‡è²ã€é›†åˆæ¦‚å¿µä»¥åŠæ˜ ž®„)åQŒæŠŠSAXå’ŒDOM的功能有效地¾l“åˆèµäh¥ã€?br />在ä‹É用设计上ž®½å¯èƒ½åœ°éšè—原æ¥ä½¿ç”¨XML˜q‡ç¨‹ä¸çš„夿‚性。利用JDOM处ç†XML文档ž®†æ˜¯ä¸€ä»¶è½»æ¾ã€ç®€å•的事ã€?br />JDOMåœ?000òq´çš„æ˜¥å¤©è¢«BrettMcLaughlinå’ŒJasonHunterå¼€å‘出æ¥ï¼Œä»¥å×Iè¡¥DOMåŠSAX在实际应用当ä¸çš„ä¸èƒö之处ã€?br />˜q™äº›ä¸èƒö之处主è¦åœ¨äºŽSAX没有文档修改ã€éšæœø™®¿é—®ä»¥åŠè¾“出的功能åQŒè€Œå¯¹äºŽDOMæ¥è¯´åQŒJAVA½E‹åºå‘˜åœ¨ä½¿ç”¨æ—¶æ¥ç”¨è“væ¥æ€»è§‰å¾—ä¸å¤ªæ–¹ä¾Ñ€?br />DOMçš„ç¼ºç‚¹ä¸»è¦æ˜¯æ¥è‡ªäºŽç”±äºŽDom是一个接å£å®šä¹‰è¯a€åQˆIDLåQ?它的ä»ÕdŠ¡æ˜¯åœ¨ä¸åŒè¯è¨€å®žçްä¸çš„ä¸€ä¸ªæœ€ä½Žçš„é€šç”¨æ ‡å‡†åQŒåÆˆä¸æ˜¯ä¸ºJAVA特别设计的。JDOMçš„æœ€æ–°ç‰ˆæœ¬äØ“JDOMBeta9。最˜q‘JDOM被收录到JSR-102内,˜q™æ ‡å¿—ç€JDOMæˆäؓ了JAVAòq›_°¾l„æˆçš„一部分ã€?br />二ã€JDOM包概è§?br />JDOMæ˜¯ç”±ä»¥ä¸‹å‡ ä¸ªåŒ…ç»„æˆçš„
org.jdom               包å«äº†æ‰€æœ‰çš„xml文档è¦ç´ çš„java¾c?br />Â
org.jdom.adapters        包å«äº†ä¸Ždom适é…çš„java¾c?br />Â
org.jdom.filter           包å«äº†xml文档的过滤器¾c?br />Â
org.jdom.input           包å«äº†è¯»å–xml文档的类
Â
org.jdom.output          包å«äº†å†™å…¥xml文档的类
Â
org.jdom.transform       包å«äº†å°†jdomxml文档接å£è½¬æ¢ä¸ºå…¶ä»–xml文档接å£
Â
org.jdom.xpath           包å«äº†å¯¹xml文档xpathæ“作的类
三ã€JDOM¾c»è¯´æ˜?br />1ã€org.JDOM˜q™ä¸ªåŒ…é‡Œçš„ç±»æ˜¯ä½ Jè§£æžxmlæ–‡äšgåŽæ‰€è¦ç”¨åˆ°çš„æ‰€æœ‰æ•°æ®ç±»åž‹ã€?br />Attribute
CDATA
Coment
DocType
Document
Element
EntityRef
Namespace
ProscessingInstruction
Text
2ã€org.JDOM.transform在涉åŠxsltæ ¼å¼è½¬æ¢æ—¶åº”使用下é¢çš?个类
JDOMSource
JDOMResult
org.JDOM.input
3ã€è¾“入类åQŒä¸€èˆ¬ç”¨äºŽæ–‡æ¡£çš„创å¾å·¥ä½œ
SAXBuilder
DOMBuilder
ResultSetBuilder
4ã€org.JDOM.output输出¾c»ï¼Œç”¨äºŽæ–‡æ¡£è½¬æ¢è¾“出
XMLOutputter
SAXOutputter
DomOutputter
JTreeOutputter
ä½¿ç”¨å‰æ³¨æ„事™å¹ï¼š
1.JDOM对于JAXP以åŠTRax的支æŒ?br />JDOM支æŒJAXP1.1åQšä½ å¯ä»¥åœ¨ç¨‹åºä¸ä½¿ç”¨ä»ÖM½•çš„parser工具¾c?默认情况下是JAXPçš„parserã€?br />制定特别的parserå¯ç”¨å¦‚下形å¼
SAXBuilder parser
 =new SAXBuilder("org.apache.crimson.parser.XMLReaderImpl");
 Document doc=parser.build("http://www.cafeconleche.org/");
 //work with the document...
JDOM也支æŒTRaXåQšXSLTå¯é€šè¿‡JDOMSource以åŠJDOMResult¾cÀL¥è½¬æ¢åQˆå‚è§ä»¥åŽç« 节)
2.注æ„在JDOM里文档(DocumentåQ‰ç±»ç”±org.JDOM.Documentæ¥è¡¨½Cºã€‚è¿™è¦ä¸Žorg.w3c.domä¸çš„Document区别开åQŒè¿™2¿Uæ ¼å¼å¦‚何è{æ¢åœ¨åŽé¢ä¼šè¯´æ˜Žã€?br />ä»¥ä¸‹å¦‚æ— ç‰ÒŽŒ‡å‡æŒ‡JDOM里的Documentã€?br />å››ã€JDOM主è¦ä½¿ç”¨æ–ÒŽ³•
1.Ducument¾c?br />(1)Documentçš„æ“作方法:
Element root=new Element("GREETING");
Document doc=new Document(root);
root.setText("Hello JDOM!");
或者简å•的使用Document doc=new Document(new Element("GREETING").setText("HelloJDOM!t"));
˜q™ç‚¹å’ŒDOMä¸åŒã€‚Domåˆ™éœ€è¦æ›´ä¸ºå¤æ‚的代ç åQŒå¦‚下:
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document doc=builder.newDocument();
Element root=doc.createElement("root");
Text text=doc.createText("This is the root");
root.appendChild(text);
doc.appendChild(root);
注æ„事项åQšJDOMä¸å…许åŒä¸€ä¸ªèŠ‚ç‚¹åŒæ—¶è¢«2个或多个文档相关è”,è¦åœ¨½W?个文档ä¸ä½¿ç”¨åŽŸæ¥è€æ–‡æ¡£ä¸çš„节点的è¯ã€‚首先需è¦ä‹É用detach()把这个节点分开æ¥ã€?br />(2)ä»Žæ–‡ä»¶ã€æµã€ç³»¾lŸIDã€URL得到Document对象åQ?br />DOMBuilder builder=new DOMBuilder();
Document doc=builder.build(new File("jdom_test.xml"));
SAXBuilder builder=new SAXBuilder();
Document doc=builder.build(url);
在新版本ä¸DOMBuilderå·²ç»Deprecated掉DOMBuilder.builder(url)åQŒç”¨SAX效率会比较快ã€?br />˜q™é‡Œä¸¾ä¸€ä¸ªå°ä¾‹ååQŒäؓ了简å•è“vè§ï¼Œä½¿ç”¨Stringå¯¹è±¡ç›´æŽ¥ä½œäØ“xmlæ•°æ®æºï¼š
 Public jdomTest(){
   String textXml=null;
   textXml="<note>";
   textXml=textXml+
       "<to>aaa</to><from>bbb</from><heading>ccc</heading><body>ddd</body>";
   textXml=textXml+"</note>";
   SAXBuilderbuilder=newSAXBuilder();
   Document doc=null;
   Reader in=new StringReader(textXml);
   try{
     doc=builder.build(in);
     Element root=doc.getRootElement();
     List ls=root.getChildren();//æ³¨æ„æ¤å¤„å–出的是root节点下é¢çš„一层的Element集åˆ
     for(Iterator iter=ls.iterator();iter.hasNext();){
       Element el=(Element)iter.next();
       if(el.getName().equals("to")){
        System.out.println(el.getText());
       }
     }
   }
   catch(IOException ex){
     ex.printStackTrace();
   }
   catch(JDOMException ex){
     ex.printStackTrace();
   }
 }
(3)DOMçš„documentå’ŒJDOMçš„Document之间的相互è{æ¢ä‹É用方法,½Ž€å•ï¼
DOMBuilder builder=new DOMBuilder();
org.jdom.Document jdomDocument=builder.build(domDocument);
DOMOutputter converter=new DOMOutputter();//workwiththeJDOMdocument�br />org.w3c.dom.Document domDocument=converter.output(jdomDocument);
//workwiththeDOMdocument�br />2.XML文档输出
XMLOutPutter¾c»ï¼š
JDOM的输出éžå¸¸çµ‹z?支æŒå¾ˆå¤š¿Uioæ ¼å¼ä»¥åŠé£Žæ ¼çš„输å‡?br />Document doc=newDocument(...);
XMLOutputter outp=new XMLOutputter();
outp.output(doc,fileOutputStream);//Rawoutput
outp.setTextTrim(true);//Compressed output
outp.output(doc,socket.getOutputStream());
outp.setIndent("");//Pretty output
outp.setNewlines(true);
outp.output(doc,System.out);
详细请å‚阅最新的JDOMAPI手册
3.Element¾c»ï¼š
(1)‹¹è§ˆElementæ ?br />Element root=doc.getRootElement();//èŽ·å¾—æ ¹å…ƒç´ element
List allChildren=root.getChildren();//获得所有åå…ƒç´ çš„ä¸€ä¸ªlist
List namedChildren=root.getChildren("name");//获得指定åç§°åå…ƒç´ çš„list
Element child=root.getChild("name");//获得指定å称的第一个åå…ƒç´
JDOM¾l™äº†æˆ‘们很多很絋zÈš„使用æ–ÒŽ³•æ¥ç®¡ç†åå…ƒç´ åQˆè¿™é‡Œçš„List是java.util.ListåQ?br />List allChildren=root.getChildren();
allChildren.remove(3);//åˆ é™¤½W¬å››ä¸ªåå…ƒç´
allChildren.removeAll(root.getChildren("jack"));//åˆ é™¤å«â€œjackâ€çš„åå…ƒç´?br />root.removeChildren("jack");//便æ·å†™æ³•
allChildren.add(newElement("jane"));//åŠ å…¥
root.addContent(newElement("jane"));//便æ·å†™æ³•
allChildren.add(0,newElement("first"));
(2)¿UÕdЍElements:
在JDOM里很½Ž€å?br />Element movable=new Element("movable");
parent1.addContent(movable);//place
parent1.removeContent(movable);//remove
parent2.addContent(movable);//add
在Dom�br />Element movable=doc1.createElement("movable");
parent1.appendChild(movable);//place
parent1.removeChild(movable);//remove
parent2.appendChild(movable);//出错!
补充åQšçº é”™æ€?br />JDOMçš„Elementæž„é€ å‡½æ•ŽÍ¼ˆä»¥åŠå®ƒçš„其他函数åQ‰ä¼š‹‚€æŸ¥element是å¦åˆæ³•ã€?br />而它的add/removeæ–ÒŽ³•ä¼šæ£€æŸ¥æ ‘¾l“æž„åQŒæ£€æŸ¥å†…容如下:
1.在ä“Qä½•æ ‘ä¸æ˜¯å¦æœ‰å›žçŽ¯èŠ‚ç‚¹
2.是å¦åªæœ‰ä¸€ä¸ªæ ¹èŠ‚ç‚¹
3.æ˜¯å¦æœ‰ä¸€è‡´çš„命å½Iºé—´åQˆNamespacesåQ?br />(3)Elementçš„text内容è¯Õd–
<description>
A cool demo
</description>
//The text is directly available
//Returns"\n A cool demo\n"
String desc=element.getText();
//There's a convenient short cut
//Returns "A cool demo"
String desc=element.getTextTrim();
(4)Elment内容修改
element.setText("Anewdescription");
3.坿£¼‹®è§£é‡Šç‰¹ŒDŠå—½W?br />element.setText("<xml>content");
4.CDATA的数æ®å†™å…¥ã€è¯»å‡?br />element.addContent(newCDATA("<xml>content"));
String noDifference=element.getText();
æ··åˆå†…容
elementå¯èƒ½åŒ…å«å¾ˆå¤š¿U内容,比如è¯?br /><table>
<!?Some comment-->
Some text
<tr>Some child element</tr>
</table>
å–tableçš„åå…ƒç´ tr
String text=table.getTextTrim();
Element tr=table.getChild("tr");
也å¯ä½¿ç”¨å¦å¤–一个比较简å•çš„æ–ÒŽ³•
List mixedCo=table.getContent();
Iterator itr=mixedCo.iterator();
while(itr.hasNext()){
Objecto=i.next();
if(o instanceof Comment){...}
//˜q™é‡Œå¯ä»¥å†™æˆComment,Element,Text,CDATA,ProcessingInstruction,或者是EntityRef的类åž?br />}
//现在¿U»é™¤Comment,注愘q™é‡Œæ¸¸æ ‡åº”䨓1ã€‚è¿™æ˜¯ç”±äºŽå›žè½¦é”®ä¹Ÿè¢«è§£æžæˆText¾cÈš„¾~˜æ•…,所以Comment™å¹åº”ä¸?ã€?br />mixedCo.remove(1);
4.Attribute¾c?br /><table width="100%" border="0"></table>
String width=table.getAttributeValue("width");//获得attribute
Int border=table.getAttribute("border").getIntValue();
table.setAttribute("vspace","0");//讄¡½®attribute
table.removeAttribute("vspace");//åˆ é™¤ä¸€ä¸ªæˆ–å…¨éƒ¨attribute
table.getAttributes().clear();
5.å¤„ç†æŒ‡ä×o(ProcessingInstructions)æ“作
一个Pls的例å?br /><?br?>
<?cocoon-processtype="xslt"?>
         |       |
         |       |
Â Â Â Â Â Â Â ç›®æ ‡Â Â Â Â æ•°æ®
处ç†ç›®æ ‡åç§°(Target)
String target=pi.getTarget();
获得所有数æ®ï¼ˆdataåQ‰ï¼Œåœ¨ç›®æ ‡ï¼ˆtargetåQ‰ä»¥åŽçš„æ‰€æœ‰æ•°æ®éƒ½ä¼šè¢«˜q”回ã€?br />String data=pi.getData();
String type=pi.getValue("type");获得指定属性的数æ®
List ls=pi.getNames();获得所有属性的åç§°
6.命å½Iºé—´æ“作
<xhtml:html
 xmlns:xhtml="http://www.w3.org/1999/xhtml">
<xhtml:title>HomePage</xhtml:title>
</xhtml:html>
Namespace xhtml=Namespace.getNamespace("xhtml","http://www.w3.org/1999/xhtml");
List kids=html.getChildren("title",xhtml);
Element kid=html.getChild("title",xhtml);
kid.addContent(newElement("table",xhtml));
7.XSLTæ ¼å¼è½¬æ¢
使用以下函数å¯å¯¹XSLT转æ¢
最åŽå¦‚æžœä½ éœ€è¦ä‹É用w3cçš„Document则需è¦è{æ¢ä¸€ä¸‹ã€?br />Public static Document transform(String stylesheetåQŒDocument in)
                                       Throws JDOMException{
    try{
      Transformer transformer=TransformerFactory.newInstance()
                            .new Transformer(newstreamSource(stylesheet));
      JDOMResult out=new JDOMResult();
      transformer.transform(newJDOMSource(in),out);
      return out.getDocument();
    }
    catch(TransformerException e){
      throw newJDOMException("XSLT Trandformation failed",e);
    }
  }
五ã€ç”¨ä¾?
1ã€ç”Ÿæˆxml文档åQ?br />Â
Â
Public class WriteXML{
   Public void BuildXML() throws Exception{
       Element root,student,number,name,age;       Â
       root=new Element("student-info");//ç”Ÿæˆæ ¹å…ƒç´ :student-info
       student=new Element("student");//生æˆå…ƒç´ åQšstudent(number,name,age)                           Â
       number=new Element("number");
       name=new Element("name");
       age=new Element("age");
       Document doc=new Document(root);//ž®†æ ¹å…ƒç´ æ¤å…¥æ–‡æ¡£docä¸?br />       number.setText("001");
       name.setText("lnman");
       age.setText("24");
       student.addContent(number);
       student.addContent(name);
       student.addContent(age);
       root.addContent(student);
       Format format=Format.getCompactFormat();
       format.setEncoding("gb2312");//讄¡½®xmlæ–‡äšg的嗽W¦äØ“gb2312
       format.setIndent("   ");//讄¡½®xmlæ–‡äšg的羃˜q›äØ“4个空æ ?br />       XMLOutputterXML Out=new XMLOutputter(format);//å…ƒç´ åŽæ¢è¡Œä¸€å±‚å…ƒç´ ç¾ƒå››æ ¼
       XMLOut.output(doc,new FileOutputStream("studentinfo.xml"));Â
}
   Public static void main(String[] args) throws Exception{
       WriteXML w=new WriteXML();
       System.out.println("NowwebuildanXMLdocument.....");
       w.BuildXML();
       System.out.println("finished!");
}
}
生æˆçš„xml文档为:
<?xmlversion="1.0"encoding="gb2312"?>
<student-info>
   <student>
       <number>001</number>
       <name>lnman</name>
       <age>24</age>
   </student>
</student-info>
Â
Â
创å¾XML文档2åQ?br /> Public class CreateXML{
 Public void Create(){
  try{
   Document doc=new Document(); Â
   ProcessingInstruction pi=new ProcessingInstruction("xml-stylesheet","type="text/xsl"href="test.xsl"");
   doc.addContent(pi);  Â
   Namespace ns=Namespace.getNamespace("http://www.bromon.org");
   Namespace ns2=Namespace.getNamespace("other","http://www.w3c.org");
   Element root=new Element("æ ¹å…ƒç´?,ns);
   root.addNamespaceDeclaration(ns2);
   doc.setRootElement(root);
   Elemente l1=new Element("å…ƒç´ ä¸€");
   el1.setAttribute("属æ€?,"属性一");  Â
   Text text1=new Text("å…ƒç´ å€?);
            Element em=new Element("å…ƒç´ äº?).addContent("½W¬äºŒä¸ªå…ƒç´?);
   el1.addContent(text1);
            el1.addContent(em);           Â
            Elementel2=newElement("å…ƒç´ ä¸?).addContent("½W¬ä¸‰ä¸ªå…ƒç´?);
            root.addContent(el1);
            root.addContent(el2);           Â
            //¾~©è¿›å››ä¸ª½Iºæ ¼,自动æ¢è¡Œ,gb2312¾~–ç
            XMLOutputter outputter=new XMLOutputter(" ",true,"GB2312");
            outputter.output(doc,newFileWriter("test.xml"));
        }catch(Exceptione) {
         System.out.println(e);
        }
    }   Â
    Public static void main(String args[]){
     New CreateXML().Create();
    }   Â
 }
2ã€è¯»å–xml文档的例å:
importorg.jdom.output.*;
importorg.jdom.input.*;
importorg.jdom.*;
importjava.io.*;
importjava.util.*;
public class ReadXML{
   public static void main(String[] args) throws Exception{
       SAXBuilder builder=new SAXBuilder();
       Document read_doc=builder.build("studentinfo.xml");
       Element stu=read_doc.getRootElement();
       List list=stu.getChildren("student");
       for(int i=0;i<list.size();i++){
           Element e=(Element)list.get(i);
           String str_number=e.getChildText("number");
           String str_name=e.getChildText("name");
           String str_age=e.getChildText("age");
           System.out.println("---------STUDENT--------------");
           System.out.println("NUMBER:"+str_number);
           System.out.println("NAME:"+str_name);
           System.out.println("AGE:"+str_age);
           System.out.println("------------------------------");
           System.out.println();
       }Â
      }
}
3ã€DTD验è¯çš„:
 Public class XMLWithDTD{
 Public void validate() {
  try{
   SAXBuilder builder=new SAXBuilder(true);
   builder.setFeature("http://xml.org/sax/features/validation";,true);
   Document doc=builder.build(newFileReader("author.xml"));  Â
   System.out.println("æžæŽ‚");
   XMLOutputter outputter=new XMLOutputter();
   outputter.output(doc,System.out);
  }catch(Exceptione){
   System.out.println(e);
  } Â
 }
 Public static void main(String args[]){
  new XMLWithDTD().validate();
 }Â
 }
 需è¦è¯´æ˜Žçš„æ˜¯ï¼Œ˜q™ä¸ª½E‹åºæ²¡æœ‰æŒ‡æ˜Žä½¿ç”¨å“ªä¸ªDTDæ–‡äšg。DTDæ–‡äšg的佾|®æ˜¯åœ¨XML䏿Œ‡å®šçš„åQŒè€Œä¸”DTD䏿”¯æŒå‘½å空é—ß_¼Œä¸€ä¸ªXMLåªèƒ½å¼•用一个DTDåQŒæ‰€ä»¥ç¨‹åºç›´æŽ¥è¯»å–XML䏿Œ‡å®šçš„DTDåQŒç¨‹åºæœ¬íw«ä¸ç”¨æŒ‡å®šã€‚丘q‡è¿™æ ·ä¸€æ¥ï¼Œå¥½è±¡ž®±åªèƒ½ä‹É用外部å¼çš„DTD引用方å¼äº†ï¼Ÿé«˜äh指点ã€?br />Â
Â
4ã€XMLSchema验è¯çš„:
 Public classXMLWithSchema{
 String xml="test.xml";
 String schema="test-schema.xml";
 Public void validate(){
  try{
   SAXBuilder builder=new SAXBuilder(true);
   //指定¾U¦æŸæ–¹å¼ä¸ºXMLschema
   builder.setFeature("http://apache.org/xml/features/validation/schema";, true);
   //导入schemaæ–‡äšg
builder.setProperty("http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation";,schema);
   Document doc=builder.build(new FileReader(xml));  Â
   System.out.println("æžæŽ‚");
   XMLOutputter outputter=new XMLOutputter();
   outputter.output(doc,System.out);
  }catch(Exceptione){
   System.out.println("验è¯å¤ÞpÓ|:"+e);
  }Â
 }
 }
 上é¢çš„程åºå°±æŒ‡å‡ºäº†è¦å¼•入的XMLSchemaæ–‡äšg的佾|®ã€?br />Â
Â
 ¾pÈ»Ÿé»˜è®¤è¾“出是UTF-8åQŒè¿™æœ‰å¯èƒ½å¯¼è‡´å‡ºçŽîCØ•ç ã€?br />5ã€Xpath例ååQ?br />JDOM的关于XPATHçš„api在org.jdom.xpath˜q™ä¸ªåŒ…里。这个包下,有一个抽象类XPath.java和实现类JaxenXPath.javaåQŒä‹É用时先用XPath¾cÈš„陿€æ–¹æ³•newInstance(Stringxpath)得到XPath对象åQŒç„¶åŽè°ƒç”¨å®ƒçš„selectNodes(Objectcontext)æ–ÒŽ³•或selectSingleNode(Objectcontext)æ–ÒŽ³•åQŒå‰è€…æ ¹æ®xpathè¯å¥˜q”回一¾l„节ç‚?List对象)åQ›åŽè€…æ ¹æ®ä¸€ä¸ªxpathè¯å¥˜q”回½W¦åˆæ¡äšg的第一个节ç‚?Object¾cÕdž‹)。请看jdom-1.0自带的范例程åºï¼š
    它分æžåœ¨web.xmlæ–‡äšgä¸çš„æ³¨å†Œçš„servlet的个数åŠå‚数个数åQŒåƈ输出角色åã€?br />web.xmlæ–‡äšgåQ?br /><?xmlversion="1.0"encoding="ISO-8859-1"?>
<!--
<!DOCTYPEweb-app
   PUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.2//EN"
   "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">
-->
<web-app>
   <servlet>
       <servlet-name>snoop</servlet-name>
       <servlet-class>SnoopServlet</servlet-class>
   </servlet>
   <servlet>
       <servlet-name>file</servlet-name>
       <servlet-class>ViewFile</servlet-class>
       <init-param>
           <param-name>initial</param-name>
           <param-value>1000</param-value>
           <description>Theinitialvalueforthecounter <!--optional--></description>
       </init-param>
   </servlet>
   <servlet-mapping>
       <servlet-name>mv</servlet-name>
       <url-pattern>*.wm</url-pattern>
   </servlet-mapping>
   <distributed/>
   <security-role>
     <role-name>manager</role-name>
     <role-name>director</role-name>
     <role-name>president</role-name>
   </security-role>
</web-app>
处熽E‹åºåQ?br />importjava.io.*;
importjava.util.*;Â
publicclassXPathReader{Â Â Â Â Â
   publicstaticvoidmain(String[]args)throwsIOException,JDOMException{
       if(args.length!=1){
           System.err.println("Usage:javaXPathReaderweb.xml");
           return;
       }
       Stringfile name=args[0];//从命令行输入web.xml
       PrintStream out=System.out;
       SAXBuilder builder=new SAXBuilder();
       Document doc=builder.build(new File(filename));//得到Document对象
Â
Â
       //Printservletinformation
       XPath servletPath=XPath.newInstance("http://servlet");//,选择ä»ÀL„路径下servletå…ƒç´
       List servlets=servletPath.selectNodes(doc);//˜q”回所有的servletå…ƒç´ ã€?br />       out.println("This WAR has"+servlets.size()+"registered servlets:");
       Iterator i=servlets.iterator();
       while(i.hasNext()){//输出servletä¿¡æ¯
           Element servlet=(Element)i.next();
           out.print("\t"+servlet.getChild("servlet-name")
                                   .getTextTrim()+
                     "for"+servlet.getChild("servlet-class")
                                      .getTextTrim());
           List initParams=servlet.getChildren("init-param");
           out.println("(it has"+initParams.size()+"initparams)");Â
       }            Â
       //Printsecurityroleinformation
       XPath rolePath=XPath.newInstance("http://security-role/role-name/text()");
       List roleNames=rolePath.selectNodes(doc);//得到所有的角色å?br />       if(roleNames.size()==0){
           out.println("This WAR contains no roles");
       }else{
           out.println("This WAR contains"+roleNames.size()+"roles:");
           i=roleNames.iterator();
           while(i.hasNext()){//输出角色å?br />               out.println("\t"+((Text)i.next()).getTextTrim());
           }
       }
   }   Â
}
Â
Â
输出¾l“æžœ:
C:\java>java  XPathReaderweb.xml
ThisWARhas2registeredservlets:
       snoopforSnoopServlet(ithas0initparams)
       fileforViewFile(ithas1initparams)
ThisWARcontains3roles:
       manager
       director
       president
Â
Â
6ã€æ•°æ®è¾“å…¥è¦ç”¨åˆ°XML文档è¦é€šè¿‡org.jdom.input包,å过æ¥éœ€è¦org.jdom.output。如å‰é¢æ‰€è¯ß_¼Œå…Ïx˜¯çœ‹API文档ž®Þpƒ½å¤Ÿä‹É用ã€?br />我们的例å读入XMLæ–‡äšgexampleA.xmlåQŒåР入䏀æ¡å¤„ç†æŒ‡ä»¤ï¼Œä¿®æ”¹½W¬ä¸€æœ¬ä¹¦çš„ähæ ¼å’Œä½œè€…ï¼Œòq¶æ·»åР䏀æ¡å±žæ€§ï¼Œç„¶åŽå†™å…¥æ–‡äšgexampleB.xmlåQ?br />//exampleA.xml
<?xmlversion="1.0"encoding="GBK"?>
<bookList>
<book>
<name>Java¾~–程入门</name>
<author>å¼ ä¸‰</author>
<publishDate>2002-6-6</publishDate>
<price>35.0</price>
</book>
<book>
<name>XML在Javaä¸çš„应用</name>
<author>æŽå››</author>
<publishDate>2002-9-16</publishDate>
<price>92.0</price>
</book>
</bookList>
//testJDOM.java
importorg.jdom.*;
importorg.jdom.output.*;
importorg.jdom.input.*;
importjava.io.*;
publicclassTestJDOM{
publicstaticvoidmain(Stringargs[])throwsException{
SAXBuildersb=newSAXBuilder();
//ä»Žæ–‡ä»¶æž„é€ ä¸€ä¸ªDocumentåQŒå› 为XMLæ–‡äšgä¸å·²¾l指定了¾~–ç åQŒæ‰€ä»¥è¿™é‡Œä¸å¿…了
Documentdoc=sb.build(newFileInputStream("exampleA.xml"));
ProcessingInstructionpi=newProcessingInstruction//åŠ å…¥ä¸€æ¡å¤„ç†æŒ‡ä»?br />("xml-stylesheet","href=\"bookList.html.xsl\"type=\"text/xsl\"");
doc.addContent(pi);
Elementroot=doc.getRootElement();//å¾—åˆ°æ ¹å…ƒç´?br />java.util.Listbooks=root.getChildren();//å¾—åˆ°æ ¹å…ƒç´ æ‰€æœ‰åå…ƒç´ çš„é›†å?br />Elementbook=(Element)books.get(0);//得到½W¬ä¸€ä¸ªbookå…ƒç´
//为第一本书æ·ÕdР䏀æ¡å±žæ€?br />Attributea=newAttribute("hot","true");
book.setAttribute(a);
Elementauthor=book.getChild("author");//得到指定的å—å…ƒç´
author.setText("王五");//ž®†ä½œè€…改为王äº?br />//或Textt=newText("王五");book.addContent(t);
Elementprice=book.getChild("price");//得到指定的å—å…ƒç´
//修改ä»äh ¼åQŒæ¯”较éƒé—ïLš„æ˜¯æˆ‘们必™å»è‡ªå·Þp{æ¢æ•°æ®ç±»åž‹ï¼Œè€Œè¿™æ£æ˜¯JAXB的优åŠ?br />author.setText(Float.toString(50.0f));
Stringindent="";
booleannewLines=true;
XMLOutputteroutp=newXMLOutputter(indent,newLines,"GBK");
outp.output(doc,newFileOutputStream("exampleB.xml"));
}
};
执行¾l“æžœexampleB.xmlåQ?br /><?xmlversion="1.0"encoding="GBK"?>
<bookList>
<bookhot=â€trueâ€?gt;
<name>Java¾~–程入门</name>
<author>50.0</author>
<publishDate>2002-6-6</publishDate>
<price>35.0</price>
</book>
<book>
<name>XML在Javaä¸çš„应用</name>
<author>æŽå››</author>
<publishDate>2002-9-16</publishDate>
<price>92.0</price>
</book>
</bookList>
<?xml-stylesheethref="bookList.html.xsl"type="text/xsl"?>
在默认情况下åQŒJDOMçš„Element¾cÈš„getText()˜q™ç±»çš„æ–¹æ³•ä¸ä¼šè¿‡æ»¤ç©ºç™½å—½W¦ï¼Œå¦‚æžœä½ éœ€è¦è¿‡æ»¤ï¼Œç”¨setTextTrim().

]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º
¾©É½ÏØ|
½ðÐã|
ͨÁÉÊÐ|
±¦ÛæÇø|
Íû³ÇÏØ|
ËÄ´¨Ê¡|
ÀÖ¶¼ÏØ|
Á½µ±ÏØ|
Òø´¨ÊÐ|
ÑÓÊÙÏØ|
ͨºÓÏØ|
Ö¾µ¤ÏØ|
¹ó¸ÛÊÐ|
º£ÄþÊÐ|
ÆÕ¶ý|
½·áÊÐ|
¹ã²ýÏØ|
°àÂêÏØ|
ÁÙÇåÊÐ|
Öñ±±ÊÐ|
С½ðÏØ|
´ó·áÊÐ|
Î÷³ëÏØ|
¸§Ë³ÊÐ|
Íû½ÏØ|
ÁéÉ½ÏØ|
´óÐËÇø|
»ÆÆÖÇø|
ÆîÃÅÏØ|
èµÉ½ÏØ|
µÂ¸ñÏØ|
ÐÂÆ½|
ÉÛÑôÏØ|
»Ý¶«ÏØ|
ÃûÉ½ÏØ|
¼ÎÓãÏØ|
ºÊÔóÊÐ|
¿âÂׯì|
¾²º£ÏØ|
ºÏ½ÏØ|
á·É½ÏØ|