java 连接数据库并生成XML的小问题 附上源码

jasonwyang 2008-08-19 08:21:02
数据库表结构如下:
pid:图片ID
topic: 图片评论
pURL:图片连接 其实存的是文件名
cDate:图片上传日期
想生成的XML格式如下:
<?xml version="1.0" encoding="utf-8" ?>
<main>
<mh m="3" y="2008">
<ds d="21" bURL="7-11.jpg" pid="1" />
<ds d="22" bURL="7-11.jpg" pid="2" />
<ds d="28" bURL="7-11.jpg" pid="3"/>
<ds d="29" bURL="7-11.jpg" pid="4"/>
</mh>
<mh m="4" y="2008">
<ds d="12" bURL="7-11.jpg" pid="5" />
<ds d="13" bURL="7-11.jpg" pid="6"/>
<ds d="14" bURL="7-11.jpg" pid="7"/>
<ds d="15" bURL="7-11.jpg" pid="8" />
</mh>
....
</main>
我写的代码,只是格式有点小差异。不知道用什么样的办法遍历数据库能生成想要的格式。代码如下:
public void BuildXMLDocImage() throws IOException, JDOMException {
// 创建根节点 list;
Element root = new Element("main");

// 根节点添加到文档中;
Document Doc = new Document(root);
Connection conn = DB.getConn();

String sql = "select * from cartoon";
Statement stmt = DB.getStatement(conn);
ResultSet rs = DB.getResultSet(stmt, sql);
//System.out.println(u_name);
try {
while (rs.next()) {
Date d = rs.getDate("cDate");
Calendar c = Calendar.getInstance();
c.setTime(d);
// 创建节点 user;
Element elements = new Element("mh");
Element elements1 = new Element("ds");

elements1.setAttribute("d", "" + c.get(Calendar.DAY_OF_MONTH));//天数
elements1.setAttribute("bURL", "" + rs.getString("bURL"));//图片地址
elements1.setAttribute("pid", "" + rs.getString("pid"));//图片ID
// 给 user 节点添加属性 id;
elements.setAttribute("m", "" + c.get(Calendar.MONTH));//月份
elements.setAttribute("y",""+c.get(Calendar.YEAR));//年份

// 给 user 节点添加子节点并赋值;
// new Element("name")中的 "name" 替换成表中相应字段,setText("xuehui")中 "xuehui 替换成表中记录值;
elements.addContent(elements1);
/// elements.addContent(new Element("age").setText("28"));
// elements.addContent(new Element("sex").setText("Male"));

// 给父节点list添加user子节点;
root.addContent(elements);

}

} catch (SQLException e) {
e.printStackTrace();
} finally {
DB.close(rs);
DB.close(stmt);
DB.close(conn);
}
// 此处 for 循环可替换成 遍历 数据库表的结果集操作;
// for (int i = 0; i < 5; i++) {


// }
XMLOutputter XMLOut = new XMLOutputter();
ss=XMLOut.outputString(root); //需要在jsp里打印出来,所以做了这个处理
// 输出 user.xml 文件;
// XMLOut.output(Doc, new FileOutputStream("d:/imageXML.xml"));
//System.out.println(Doc);

}
大家给看下,给小弟出出主意,先谢了。在线等!
...全文
179 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
大虾哥哥 2008-08-21
  • 打赏
  • 举报
回复
如果你是要直接存放成文件,或者是在控制台打印出来,并且要有格式的话,加上下面的代码:
XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat());//有空白变化,即有缩进

就可以实现你要的效果了
jasonwyang 2008-08-21
  • 打赏
  • 举报
回复
首先谢谢大家,现在不是输出格式的问题,是生成格式的问题!
newflypig 2008-08-19
  • 打赏
  • 举报
回复
如果xml是在浏览器里展现,没必要使用format格式化,IE和FF都能自动解析成树状XML,如果在AJAX中使用,更没必要格式化,生成的xml大多不需要直接展现给用户,xml是配置文档,是程序动态读取的数据存放地,不是用来展现的。
chenkangwan 2008-08-19
  • 打赏
  • 举报
回复
看了你的程序,你打印出来的格式应该是所有内容都是排成一条横线吧!
因为你在
XMLOutputter XMLOut = new XMLOutputter();
时,没有给定一个format,所以,它产生一条直线。
Format fromat = Format.getPrettyFormat();
XMLOutputter outputter=new XMLOutputter(format);
然后再写进去就可以了。

还有,Format这个class,在jdom.jar没有找到,在jdom1.0.jar或1.1本版的才有。
我前两天就吃了很多亏了。希望对你有用!!!
newflypig 2008-08-19
  • 打赏
  • 举报
回复
是JSP中写还是Servlet中?
楼主可以看看我这段servlet中的代码,希望有帮助
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
PrintWriter out=response.getWriter();
String dataname=request.getParameter("value");
Document doc=new Document();
Element root=new Element("evadeList");
List<Evade> evadeList=null;
try {
evadeList=TpmsFactroy.getEvadeDao().querryFollowEvadeByDataname(dataname);
} catch (Exception e) {
e.printStackTrace();
}
Iterator<Evade> evadeIt=evadeList.iterator();
while(evadeIt.hasNext()){
Evade evade=evadeIt.next();
Element element=new Element("evade");
element.setAttribute("id", String.valueOf(evade.getDataname()));
element.addContent(evade.getDescription());
root.addContent(element);
}
doc.addContent(root);

XMLOutputter outputter=new XMLOutputter(Format.getRawFormat().setEncoding("utf-8"));
outputter.output(doc,out);
}

67,537

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧