????最近一直在看XML,才發現XML真是個好東東,有了它,交換數據變得前所未有的方便,今天做了我的第一個XML應用,呵呵,一個基于XML技術的留言簿。
????放棄了數據庫,而直接使用XML來存儲信息,讀取后通過XSLT轉換成HTML直接顯示,感覺方便極了。
????開發工具采用Eclipse作為Java IDE,XML操作使用JDOM,XML文件編輯使用Oxygen XML Editor(很好用的XML編輯器,純JAVA)。
????這是guestbook.xml,所有的留言都存儲在這里。
<?xml?version="1.0"?encoding="gb2312"?>
<!DOCTYPE?guestbook?SYSTEM?"file:/F:/site/xmlGuestbook/guestbook.dtd">
<?xml-stylesheet?type="text/xsl"?href="guestbook.xsl"?>
<guestbook>
????<message>
????????<name>Vince?Carter</name>
????????<ip>202.113.66.66</ip>
????????<content>a?good?site,do?you?think?so?</content>
????</message>
????<message>
????????<name>Antony?Walker</name>
????????<ip>202.113.22.123</ip>
????????<content>VC?isn't?right?here,you?should?be?traded.</content>
????</message>
</guestbook>

<!ELEMENT?message?(#PCDATA?|?name?|?ip?|?content)*>
<!ELEMENT?content?(#PCDATA)>
<!ELEMENT?guestbook?(#PCDATA?|?message)*>
<!ELEMENT?ip?(#PCDATA)>
<!ELEMENT?name?(#PCDATA)>

<?xml?version="1.0"?>
<xsl:stylesheet?xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template?match="/">
<html>
<body>
<table?border="1"?bgcolor="yellow">
<tr>
<th>Name</th>
<th>IP</th>
<th>Content</th>
</tr>
<xsl:for-each?select="guestbook/message">
<tr>
<td><xsl:value-of?select="name"/></td>
<td><xsl:value-of?select="ip"/></td>
<td><xsl:value-of?select="content"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

/*
?*?創建日期?2005-2-15
?*/
package?com.tiantian.xmlguestbook;//com.tiantian

import?org.jdom.Document;
import?org.jdom.Element;
import?org.jdom.JDOMException;
import?org.jdom.input.SAXBuilder;
import?org.jdom.output.*;
import?java.io.*;

/**
?*?@author?tiantian
?*/
public?class?XMLguestbookBean?{

????public?static?void?main(String[]?args)?{
????????XMLguestbookBean?exam?=?new?XMLguestbookBean();//聲明XMLguestbookBean的一個實例
????????exam.addmessage("james",?"202.11.223.22",?"hahah");//增加一個留言,測試
????}

????public?Element?root?=?null;//定義根

????public?XMLguestbookBean()?{
????????//空的構造函數
????}

????private?void?addmessage(String?name,?String?ip,?String?content)?{
????????try?{
????????????SAXBuilder?sb?=?new?SAXBuilder();
????????????Document?doc?=?sb.build("guestbook.xml");
????????????root?=?doc.getRootElement();//取得根元素
????????????Element?newMessage?=?new?Element("message");
????????????Element?newName?=?new?Element("name");
????????????Element?newContent?=?new?Element("content");
????????????Element?newIp?=?new?Element("ip");
????????????newName.setText(name);?//填入名字
????????????newContent.setText(content);//填入設置
????????????newIp.setText(ip);//填入IP
????????????newMessage.addContent(newName);//添加名字到message
????????????newMessage.addContent(newIp);//添加ip地址到message
????????????newMessage.addContent(newContent);//添加留言內容到message
????????????root.addContent(newMessage);//把message添加到根上
????????????Format?format?=?Format.getCompactFormat();
????????????format.setEncoding("gb2312");?//設置xml文件的字符為gb2312
????????????format.setIndent("????");
????????????XMLOutputter?XMLOut?=?new?XMLOutputter(format);//在元素后換行,每一層元素縮排四格
????????????XMLOut.output(doc,?new?FileOutputStream("guestbook.xml"));//輸出到文件
????????}?catch?(FileNotFoundException?e)?{
????????????//?文件未找到
????????????e.printStackTrace();
????????}?catch?(JDOMException?e)?{
????????????//?JDOM異常
????????????e.printStackTrace();
????????}?catch?(IOException?e)?{
????????????//?IO異常
????????????e.printStackTrace();
????????}

????}
}


????放棄了數據庫,而直接使用XML來存儲信息,讀取后通過XSLT轉換成HTML直接顯示,感覺方便極了。
????開發工具采用Eclipse作為Java IDE,XML操作使用JDOM,XML文件編輯使用Oxygen XML Editor(很好用的XML編輯器,純JAVA)。
????這是guestbook.xml,所有的留言都存儲在這里。
















????這是DTD文件,直接用Oxygen XML Editor生成的,很方便。






????這是XSLT文件:
























????采用表格的形式組織,清晰易懂。下面是JAVA代碼。
































































????使用了Eclispe的格式化之后漂亮多了,呵呵。在Jsp/Servlet中只需用調用這個bean就行了,顯示的時候直接引用XML文件即可,是不是比上一個JSP實現簡單清晰多了呢?