Posted on 2008-10-25 08:07
夢(mèng)與橋 閱讀(877)
評(píng)論(0) 編輯 收藏 所屬分類:
jsp程序設(shè)計(jì)
1、jdom的基礎(chǔ)知識(shí)及包與類的說明,可到網(wǎng)上搜索,也可查看jdom api,這里不再羅列,提供一個(gè)地方:
http://www.java2000.net/p122。下載jdom.jar的地址:
http://www.jdom.org/dist/binary/
2、使用JDOM創(chuàng)建和讀取XML文件
一般步驟:
1)建立元素及其內(nèi)容:建立一個(gè)元素作為根結(jié)點(diǎn),建立根元素的子結(jié)點(diǎn)并加入到根結(jié)點(diǎn),子結(jié)點(diǎn)若有子結(jié)點(diǎn)就建立它們并加入到其父結(jié)點(diǎn)。也可以橫向一層層地建立,只要有條理即可。
2)以根結(jié)點(diǎn)為根元素建立文件(Document對(duì)象)。
3)建立XML文件。
4)使用org.output包中的方法建立輸出流對(duì)象
5)使用輸出流對(duì)象的output方法將Document對(duì)象輸出到文件中,完成XML文件的建立。
6)實(shí)例slDisplay.jsp代碼如下:

<%
@page contentType="text/html;charset=gb2312" %>

<%
@page import="org.jdom.*,org.jdom.input.*,org.jdom.output.XMLOutputter,
java.io.*,org.jdom.output.Format,java.util.*"%>
<html>
<head>
<title>JDOM讀取XML文件實(shí)例</title>
</head>
<body>

<%
Element root,member,name,sex,ern;
//建立根元素
root=new Element("文學(xué)沙龍");
//建立根元素的第一個(gè)元素
member=new Element("成員");
name=new Element("姓名");
sex=new Element("性別");
ern=new Element("時(shí)代");
name.setText("李白");
sex.setText("男");
ern.setText("唐");
member.addContent(name);
member.addContent(sex);
member.addContent(ern);
root.addContent(member);
//建立根元素的第二個(gè)元素
member=new Element("成員");
name=new Element("姓名");
sex=new Element("性別");
ern=new Element("時(shí)代");
name.setText("蘇軾");
sex.setText("男");
ern.setText("北宋");
member.addContent(name);
member.addContent(sex);
member.addContent(ern);
root.addContent(member);
//建立根元素的第三個(gè)元素
member=new Element("成員");
name=new Element("姓名");
sex=new Element("性別");
ern=new Element("時(shí)代");
name.setText("李清照");
sex.setText("女");
ern.setText("南宋");
member.addContent(name);
member.addContent(sex);
member.addContent(ern);
root.addContent(member);
//以根元素建立文件
Document doc=new Document(root);
//使用相對(duì)路徑,默認(rèn)到tomcat目錄下
//FileOutputStream f=new FileOutputStream("salon.xml");
String strDirPath = new File(request.getSession().getServletContext().getRealPath(request.getContextPath())).getParent();//絕對(duì)路徑
FileOutputStream f=new FileOutputStream(strDirPath+"/salon.xml");
//建立輸出流
XMLOutputter out1=new XMLOutputter();
//格式化文件
Format format=Format.getPrettyFormat();
format.setEncoding("gb2312");
out1.setFormat(format);
//將文件輸出到XML文件中
out1.output(doc,f);
%>
<table border="1" align="center">
<caption>文學(xué)沙龍</caption>
<tr>
<td>姓名</td>
<td>性別</td>
<td>時(shí)代</td>
</tr>

<%
//獲取數(shù)據(jù)
SAXBuilder builder=new SAXBuilder();//創(chuàng)建對(duì)象
//建立Document對(duì)象
//可以使用strDirpath,也中以重新獲取絕對(duì)路徑
//Document readDocument=builder.build("file:\\"+strDirPath+"/salon.xml");
Document readDocument=builder.build("file:\\"+pageContext.getServletContext().getRealPath("salon.xml"));
//得到根元素
Element rootElement=readDocument.getRootElement();
//得到根元素列表,實(shí)際上就是user元素列表
List list=rootElement.getChildren();
//---輸出數(shù)據(jù)---
for(Iterator i=list.iterator();i.hasNext();){
Element current=(Element)i.next();
out.print("<tr>");
out.println("<td>"+current.getChildText("姓名")+"</td>");
out.println("<td>"+current.getChildText("性別")+"</td>");
out.println("<td>"+current.getChildText("時(shí)代")+"</td>");
out.println("</tr>");
}
%>
</table>
</body>
</html>
2、使用JDOM修改XML文件:slUpdate.jsp代碼如下:

<%
@page contentType="text/html;charset=gb2312" %>

<%
@page import="org.jdom.*,org.jdom.input.*,org.jdom.output.XMLOutputter,
java.io.*,org.jdom.output.Format,java.util.*"%>
<html>
<head>
<title>JDOM修改XML文件</title>
</head>
<body>

<%
SAXBuilder sb=new SAXBuilder();//建立一個(gè)解析器
//構(gòu)造一個(gè)Document,讀入salon.xml文件的內(nèi)容
Document doc=sb.build(new FileInputStream(pageContext.getServletContext().getRealPath("salon.xml")));
Element root=doc.getRootElement();
List salons=root.getChildren();
//得到根元素的第一個(gè)子元素和后者的“姓名”子元素
Element salon=(Element)salons.get(0);
Element name=(Element)salon.getChild("姓名");
//“姓名”添加一個(gè)屬性
Attribute a=new Attribute("評(píng)價(jià)","詩仙");
name.setAttribute(a);

//更改根元素的第二個(gè)元素的子元素"時(shí)代".
salon=(Element)salons.get(1);
Element ern=salon.getChild("時(shí)代");//得到指定的子元素
ern.setText("宋");

//替換根元素的第三個(gè)元素,但破壞了格式,這里沒有調(diào)整
salon=(Element)salons.get(2);
salon.removeContent();
name=new Element("姓名");
Element sex=new Element("性別");
ern=new Element("時(shí)代");
name.setText("卓文君");
sex.setText("女");
ern.setText("漢");
salon.addContent(name);
salon.addContent(sex);
salon.addContent(ern);

//文件輸回到XML文件中
XMLOutputter out1=new XMLOutputter();
out1.output(doc,new FileOutputStream(pageContext.getServletContext().getRealPath("salon.xml")));
%>
<table border="1" align="center">
<caption>文學(xué)沙龍</caption>
<tr>
<td>姓名</td>
<td>性別</td>
<td>時(shí)代</td>
</tr>

<%
//獲取數(shù)據(jù)
SAXBuilder builder=new SAXBuilder();//創(chuàng)建對(duì)象
//建立Document對(duì)象
//可以使用strDirpath,也中以重新獲取絕對(duì)路徑
//Document readDocument=builder.build("file:\\"+strDirPath+"/salon.xml");
Document readDocument=builder.build("file:\\"+pageContext.getServletContext().getRealPath("salon.xml"));
//得到根元素
Element rootElement=readDocument.getRootElement();
//得到根元素列表,實(shí)際上就是user元素列表
List list=rootElement.getChildren();
//---輸出數(shù)據(jù)---
for(Iterator i=list.iterator();i.hasNext();){
Element current=(Element)i.next();
out.print("<tr>");
out.println("<td>"+current.getChildText("姓名")+"</td>");
out.println("<td>"+current.getChildText("性別")+"</td>");
out.println("<td>"+current.getChildText("時(shí)代")+"</td>");
out.println("</tr>");
}
%>
</table>
</body>
</html>
3、使用JDOM修改XML文件:data.jsp代碼如下:

<%
@ page contentType="text/html;charset=gb2312"%>

<%
@ page import="javax.xml.parsers.*,org.jdom.*,org.jdom.output.XMLOutputter,java.io.*,java.util.*, java.sql.*,org.jdom.output.Format"%>
<html>
<head>
<title> JDOM把數(shù)據(jù)庫(kù)的表轉(zhuǎn)化成XML文件示例</title>
</head>
<body>
JDOM把數(shù)據(jù)庫(kù)的表轉(zhuǎn)化成XML文件<br>

<%
//建立數(shù)據(jù)庫(kù)連接并獲取學(xué)生表的記錄集和結(jié)構(gòu)
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //加載橋驅(qū)動(dòng)程序
Connection con=DriverManager.getConnection("jdbc:odbc:Demo"); //建立數(shù)據(jù)庫(kù)連接
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery("select * from information"); //獲取結(jié)果集
rs.next();
out.println(rs.getString("字段1"));
//獲得結(jié)果集的結(jié)構(gòu)
ResultSetMetaData rsmd=rs.getMetaData();
//獲得結(jié)果集的列數(shù),也就是數(shù)據(jù)項(xiàng)的數(shù)目
int numcols=rsmd.getColumnCount();
//記錄集到XML文件的轉(zhuǎn)換
Element root,ele,name; //定義Element類的對(duì)象根元素(root)
root=new Element("student"); //建立根元素

//循環(huán), 將結(jié)果集中的每一條記錄轉(zhuǎn)換成一個(gè)元素(標(biāo)記名為“第…個(gè)記錄”)
while(rs.next())
{ele=new Element("第"+rs.getRow()+"條紀(jì)錄"); //設(shè)置元素,名為“第…個(gè)記錄”
out.println(ele);

for(int i=1;i<=numcols;i++) //循環(huán),將一條記錄中的每個(gè)字段轉(zhuǎn)換成一個(gè)元素
{// getColumnLabel(i) 獲取第i個(gè)列的字段名(列數(shù)從0開始)。
//out.println(rs.getString(i));
name=new Element(rsmd.getColumnLabel(i)); //以獲得的字段名為標(biāo)記名設(shè)置元素
name.setText(rs.getString(i)); //獲取字段內(nèi)容作為字段名元素的內(nèi)容
ele.addContent(name); //將字段名元素置為記錄的子元素

}
root.addContent(ele); //將記錄元素置為根元素的子元素
}
Document doc=new Document(root); //以根元素建立文檔
FileOutputStream f=new FileOutputStream(pageContext.getServletContext().getRealPath("DB.xml"));
XMLOutputter out1=new XMLOutputter(); //將文檔輸出形成XML文件
Format format=Format.getPrettyFormat(); //格式化文檔
format.setEncoding("gb2312"); //由于默認(rèn)的編碼是utf-8,中文將顯示為亂碼,所以設(shè)為gbk
out1.setFormat(format);
out1.output(doc,f);
rs.close(); con.close(); //關(guān)閉各個(gè)對(duì)象
out.println("數(shù)據(jù)庫(kù)表Information已成功地轉(zhuǎn)化成XML文件DB.xml!");
%>
</body>
</html>
注:這里使用的數(shù)據(jù)庫(kù)文件為Acces的,連接方式為ODBC+數(shù)據(jù)源方式,使用的表為information,可以建立這樣一個(gè)表,內(nèi)容不限,配置數(shù)據(jù)源即可。當(dāng)然可以連接其他數(shù)據(jù)庫(kù),這里只是圖個(gè)方便。