posts - 37, comments - 8, trackbacks - 0, articles - 0

jsp程序设计:JDOM操作xml

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

只有注册用户登录后才能发表评论。


网站导航: