Posted on 2008-10-25 08:07
夢與橋 閱讀(875)
評論(0) 編輯 收藏 所屬分類:
jsp程序設計
1、jdom的基礎知識及包與類的說明,可到網上搜索,也可查看jdom api,這里不再羅列,提供一個地方:
http://www.java2000.net/p122。下載jdom.jar的地址:
http://www.jdom.org/dist/binary/
2、使用JDOM創建和讀取XML文件
一般步驟:
1)建立元素及其內容:建立一個元素作為根結點,建立根元素的子結點并加入到根結點,子結點若有子結點就建立它們并加入到其父結點。也可以橫向一層層地建立,只要有條理即可。
2)以根結點為根元素建立文件(Document對象)。
3)建立XML文件。
4)使用org.output包中的方法建立輸出流對象
5)使用輸出流對象的output方法將Document對象輸出到文件中,完成XML文件的建立。
6)實例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文件實例</title>
</head>
<body>

<%
Element root,member,name,sex,ern;
//建立根元素
root=new Element("文學沙龍");
//建立根元素的第一個元素
member=new Element("成員");
name=new Element("姓名");
sex=new Element("性別");
ern=new Element("時代");
name.setText("李白");
sex.setText("男");
ern.setText("唐");
member.addContent(name);
member.addContent(sex);
member.addContent(ern);
root.addContent(member);
//建立根元素的第二個元素
member=new Element("成員");
name=new Element("姓名");
sex=new Element("性別");
ern=new Element("時代");
name.setText("蘇軾");
sex.setText("男");
ern.setText("北宋");
member.addContent(name);
member.addContent(sex);
member.addContent(ern);
root.addContent(member);
//建立根元素的第三個元素
member=new Element("成員");
name=new Element("姓名");
sex=new Element("性別");
ern=new Element("時代");
name.setText("李清照");
sex.setText("女");
ern.setText("南宋");
member.addContent(name);
member.addContent(sex);
member.addContent(ern);
root.addContent(member);
//以根元素建立文件
Document doc=new Document(root);
//使用相對路徑,默認到tomcat目錄下
//FileOutputStream f=new FileOutputStream("salon.xml");
String strDirPath = new File(request.getSession().getServletContext().getRealPath(request.getContextPath())).getParent();//絕對路徑
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>文學沙龍</caption>
<tr>
<td>姓名</td>
<td>性別</td>
<td>時代</td>
</tr>

<%
//獲取數據
SAXBuilder builder=new SAXBuilder();//創建對象
//建立Document對象
//可以使用strDirpath,也中以重新獲取絕對路徑
//Document readDocument=builder.build("file:\\"+strDirPath+"/salon.xml");
Document readDocument=builder.build("file:\\"+pageContext.getServletContext().getRealPath("salon.xml"));
//得到根元素
Element rootElement=readDocument.getRootElement();
//得到根元素列表,實際上就是user元素列表
List list=rootElement.getChildren();
//---輸出數據---
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("時代")+"</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();//建立一個解析器
//構造一個Document,讀入salon.xml文件的內容
Document doc=sb.build(new FileInputStream(pageContext.getServletContext().getRealPath("salon.xml")));
Element root=doc.getRootElement();
List salons=root.getChildren();
//得到根元素的第一個子元素和后者的“姓名”子元素
Element salon=(Element)salons.get(0);
Element name=(Element)salon.getChild("姓名");
//“姓名”添加一個屬性
Attribute a=new Attribute("評價","詩仙");
name.setAttribute(a);

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

//替換根元素的第三個元素,但破壞了格式,這里沒有調整
salon=(Element)salons.get(2);
salon.removeContent();
name=new Element("姓名");
Element sex=new Element("性別");
ern=new Element("時代");
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>文學沙龍</caption>
<tr>
<td>姓名</td>
<td>性別</td>
<td>時代</td>
</tr>

<%
//獲取數據
SAXBuilder builder=new SAXBuilder();//創建對象
//建立Document對象
//可以使用strDirpath,也中以重新獲取絕對路徑
//Document readDocument=builder.build("file:\\"+strDirPath+"/salon.xml");
Document readDocument=builder.build("file:\\"+pageContext.getServletContext().getRealPath("salon.xml"));
//得到根元素
Element rootElement=readDocument.getRootElement();
//得到根元素列表,實際上就是user元素列表
List list=rootElement.getChildren();
//---輸出數據---
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("時代")+"</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把數據庫的表轉化成XML文件示例</title>
</head>
<body>
JDOM把數據庫的表轉化成XML文件<br>

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

//循環, 將結果集中的每一條記錄轉換成一個元素(標記名為“第…個記錄”)
while(rs.next())
{ele=new Element("第"+rs.getRow()+"條紀錄"); //設置元素,名為“第…個記錄”
out.println(ele);

for(int i=1;i<=numcols;i++) //循環,將一條記錄中的每個字段轉換成一個元素
{// getColumnLabel(i) 獲取第i個列的字段名(列數從0開始)。
//out.println(rs.getString(i));
name=new Element(rsmd.getColumnLabel(i)); //以獲得的字段名為標記名設置元素
name.setText(rs.getString(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"); //由于默認的編碼是utf-8,中文將顯示為亂碼,所以設為gbk
out1.setFormat(format);
out1.output(doc,f);
rs.close(); con.close(); //關閉各個對象
out.println("數據庫表Information已成功地轉化成XML文件DB.xml!");
%>
</body>
</html>
注:這里使用的數據庫文件為Acces的,連接方式為ODBC+數據源方式,使用的表為information,可以建立這樣一個表,內容不限,配置數據源即可。當然可以連接其他數據庫,這里只是圖個方便。