﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-礼必风-随笔分类-XML技术杂谈</title><link>http://www.blogjava.net/bily/category/17267.html</link><description>IT不等于it</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 03:11:31 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 03:11:31 GMT</pubDate><ttl>60</ttl><item><title>JSP的留言簿---XML实现</title><link>http://www.blogjava.net/bily/archive/2006/11/15/81347.html</link><dc:creator>礼必风</dc:creator><author>礼必风</author><pubDate>Wed, 15 Nov 2006 10:20:00 GMT</pubDate><guid>http://www.blogjava.net/bily/archive/2006/11/15/81347.html</guid><wfw:comment>http://www.blogjava.net/bily/comments/81347.html</wfw:comment><comments>http://www.blogjava.net/bily/archive/2006/11/15/81347.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bily/comments/commentRss/81347.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bily/services/trackbacks/81347.html</trackback:ping><description><![CDATA[    最近一直在看XML，才发现XML真是个好东东，有了它，交换数据变得前所未有的方便，今天做了我的第一个XML应用，呵呵，一个基于XML技术的留言簿。<br />    放弃了数据库，而直接使用XML来存储信息，读取后通过XSLT转换成HTML直接显示，感觉方便极了。<br />    开发工具采用Eclipse作为Java IDE，XML操作使用JDOM，XML文件编辑使用Oxygen XML Editor（很好用的XML编辑器，纯JAVA）。<br />    这是guestbook.xml，所有的留言都存储在这里。
<div style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext 0.5pt solid; BACKGROUND: #e6e6e6; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; BORDER-BOTTOM: windowtext 0.5pt solid"><div><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;?xml version="1.0" encoding="gb2312"?&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;!DOCTYPE guestbook SYSTEM "file:/F:/site/xmlGuestbook/guestbook.dtd"&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;?xml-stylesheet type="text/xsl" href="guestbook.xsl"?&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;guestbook&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />    &lt;message&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />        &lt;name&gt;Vince Carter&lt;/name&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />        &lt;ip&gt;202.113.66.66&lt;/ip&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />        &lt;content&gt;a good site,do you think so?&lt;/content&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />    &lt;/message&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />    &lt;message&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />        &lt;name&gt;Antony Walker&lt;/name&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />        &lt;ip&gt;202.113.22.123&lt;/ip&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />        &lt;content&gt;VC isn't right here,you should be traded.&lt;/content&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />    &lt;/message&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;/guestbook&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" /></div></div><p>    这是DTD文件，直接用Oxygen XML Editor生成的，很方便。</p><div style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext 0.5pt solid; BACKGROUND: #e6e6e6; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; BORDER-BOTTOM: windowtext 0.5pt solid"><div><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;!ELEMENT message (#PCDATA | name | ip | content)*&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;!ELEMENT content (#PCDATA)&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;!ELEMENT guestbook (#PCDATA | message)*&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;!ELEMENT ip (#PCDATA)&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;!ELEMENT name (#PCDATA)&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" /></div></div><p>    这是XSLT文件：</p><div style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext 0.5pt solid; BACKGROUND: #e6e6e6; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; BORDER-BOTTOM: windowtext 0.5pt solid"><div><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;?xml version="1.0"?&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;xsl:template match="/"&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;html&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;body&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;table border="1" bgcolor="yellow"&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;tr&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;th&gt;Name&lt;/th&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;th&gt;IP&lt;/th&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;th&gt;Content&lt;/th&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;/tr&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;xsl:for-each select="guestbook/message"&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;tr&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;td&gt;&lt;xsl:value-of select="name"/&gt;&lt;/td&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;td&gt;&lt;xsl:value-of select="ip"/&gt;&lt;/td&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;td&gt;&lt;xsl:value-of select="content"/&gt;&lt;/td&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;/tr&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;/xsl:for-each&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;/table&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;/body&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;/html&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;/xsl:template&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />&lt;/xsl:stylesheet&gt;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" /></div></div><p>    采用表格的形式组织，清晰易懂。下面是JAVA代码。</p><div style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext 0.5pt solid; BACKGROUND: #e6e6e6; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; BORDER-BOTTOM: windowtext 0.5pt solid"><div><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />/*<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" /> * 创建日期 2005-2-15<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" /> */<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />package com.tiantian.xmlguestbook;//com.tiantian<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" /><br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />import org.jdom.Document;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />import org.jdom.Element;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />import org.jdom.JDOMException;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />import org.jdom.input.SAXBuilder;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />import org.jdom.output.*;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />import java.io.*;<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" /><br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />/**<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" /> * @author tiantian<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" /> */<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />public class XMLguestbookBean {<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" /><br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />    public static void main(String[] args) {<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />        XMLguestbookBean exam = new XMLguestbookBean();//声明XMLguestbookBean的一个实例<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />        exam.addmessage("james", "202.11.223.22", "hahah");//增加一个留言，测试<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />    }<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" /><br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />    public Element root = null;//定义根<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" /><br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />    public XMLguestbookBean() {<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />        //空的构造函数<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />    }<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" /><br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />    private void addmessage(String name, String ip, String content) {<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />        try {<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />            SAXBuilder sb = new SAXBuilder();<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />            Document doc = sb.build("guestbook.xml");<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />            root = doc.getRootElement();//取得根元素<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />            Element newMessage = new Element("message");<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />            Element newName = new Element("name");<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />            Element newContent = new Element("content");<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />            Element newIp = new Element("ip");<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />            newName.setText(name); //填入名字<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />            newContent.setText(content);//填入设置<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />            newIp.setText(ip);//填入IP<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />            newMessage.addContent(newName);//添加名字到message<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />            newMessage.addContent(newIp);//添加ip地址到message<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />            newMessage.addContent(newContent);//添加留言内容到message<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />            root.addContent(newMessage);//把message添加到根上<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />            Format format = Format.getCompactFormat();<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />            format.setEncoding("gb2312"); //设置xml文件的字符为gb2312<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />            format.setIndent("    ");<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />            XMLOutputter XMLOut = new XMLOutputter(format);//在元素后换行，每一层元素缩排四格<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />            XMLOut.output(doc, new FileOutputStream("guestbook.xml"));//输出到文件<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />        } catch (FileNotFoundException e) {<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />            // 文件未找到<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />            e.printStackTrace();<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />        } catch (JDOMException e) {<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />            // JDOM异常<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />            e.printStackTrace();<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />        } catch (IOException e) {<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />            // IO异常<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />            e.printStackTrace();<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />        }<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" /><br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />    }<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" />}<br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" /><br /><img height="16" src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" width="11" align="top" /></div></div><p>    使用了Eclispe的格式化之后漂亮多了，呵呵。在Jsp/Servlet中只需用调用这个bean就行了，显示的时候直接引用XML文件即可，是不是比上一个JSP实现简单清晰多了呢？</p><img src ="http://www.blogjava.net/bily/aggbug/81347.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bily/" target="_blank">礼必风</a> 2006-11-15 18:20 <a href="http://www.blogjava.net/bily/archive/2006/11/15/81347.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>