xml
上篇講到了XSL和XML如何在用戶端瀏覽。也是CMS內容管理系統內容發布的一種形式,即XSL(模版)+XML(內容)。
但是現實情況是由用戶端瀏覽器不支援,這樣做還會給伺服器造成一定的負載,能夠減輕伺服器服務負載的最好方法就是完全實現靜態頁面的內容訪問機制,當然這樣就需要再次將XSL和XML產生HTML或者SHTML。
呵呵,這就是所說的CMS內容管理系統內容發布的第二種形式HTML或者SHTML。
在Java中有很多方式來實現,首先是先產生XSL檔案,即模版檔案。
當然我們首先要統一編碼,所有的檔案編碼都為“UTF-8”,符合全球化標準。即產生的檔案編碼格式為“UTF-8”,資料庫編碼格式為“UTF-8”,自動產生的XSL檔案、XML檔案、HTML檔案、SHTML檔案的格式都必須為“UTF-8”,當然還包括檔案內部的聲明也都必須為“UTF-8”,當然請不要搞混了檔案編碼格式和檔案內部聲明,我覺得初學者最容易搞混。檔案編碼格式就是檔案的屬性,檔案本身是用什麼編碼格式產生的,而檔案內部聲明指的是檔案內容中也需要制定編碼。
目的當然很簡單且明確,防止出現大家頭疼的亂碼~
下面接著談談CMS內容管理系統的兩種方案:XSL+XML和HTML (一)的例子,說明XSL模版檔案的Java實現。
XSL檔案:test.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" />
<xsl:template match="/article">
<table cellspacing="1" cellpadding="1" width="200" border="1">
<tbody>
<tr>
<td><xsl:value-of select="title" /></td>
<td><xsl:value-of select="click" /></td>
</tr>
<tr>
<td><xsl:value-of select="date" /></td>
<td><xsl:value-of select="author" /></td>
</tr>
<tr>
<td><xsl:value-of select="content" disable-output-escaping="yes" /></td>
<td>測試By GlandJacky</td>
</tr>
</tbody>
</table>
</xsl:template>
</xsl:stylesheet>
首先必須先取得要轉化為XSL代碼的字串String xslContent
使用dom4j來實現XSL
//XSL代碼的頭
String XSL_HEAD = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE root [<!ENTITY nbsp \" \">]><xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\"><xsl:output method=\"html\" /><xsl:template match=\"/root\">";
//XSL代碼的尾
String XSL_END = "</xsl:template></xsl:stylesheet>";
//添加模版檔案的中HTML代碼
if (xslContent.substring(0,6).toUpperCase().equals("<HTML>")){
xslContent = XSL_HEAD + xslContent + XSL_END;
}else{
xslContent = XSL_HEAD +"<HTML><meta content=\"text/html;charset=utf-8\" http-equiv=\"content-type\" />"+ xslContent+ "</HTML>" + XSL_END;
}
// 建立document import org.dom4j.DocumentHelper; import org.dom4j.Document;
Document document = DocumentHelper.parseText(xslContent);
補充建立完document之後
需要三個參數
建立好的Document document
要建立XSL檔案的地址String path
建立檔案的編碼格式String charsetName
document.setXMLEncoding(charsetName);
FileOutputStream fos = new FileOutputStream(path);
OutputStreamWriter osw = new OutputStreamWriter(fos, charsetName);
document.write(osw);
osw.close();
fos.close();
這樣XSL檔案就建立好了。