Posted on 2008-10-25 08:07
梦与桥 阅读(865)
评论(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,可以建立这样一个表,内容不限,配置数据源即可。当然可以连接其他数据库,这里只是图个方便。