来源:
http://blog.yesky.com/Blog/tiantian911/archive/2005/02/12/73848.html
最近一直在看XML,才发现XML真是个好东东,有了它,交换数据变得前所未有的方便,今天做了我的第一个XML应用,呵呵,一个基于XML技术的留言簿。
放弃了数据库,而直接使用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实现简单清晰多了呢?
最近一直在看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 >
<! 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) >
<! ELEMENT content (#PCDATA) >
<! ELEMENT guestbook (#PCDATA | message)* >
<! ELEMENT ip (#PCDATA) >
<! ELEMENT name (#PCDATA) >
这是XSLT文件:
<?
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 >
< 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 >
采用表格的形式组织,清晰易懂。下面是JAVA代码。
/*
* 创建日期 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();
}
}
}
* 创建日期 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();
}
}
}
使用了Eclispe的格式化之后漂亮多了,呵呵。在Jsp/Servlet中只需用调用这个bean就行了,显示的时候直接引用XML文件即可,是不是比上一个JSP实现简单清晰多了呢?