使用XML實現BBS(主題列表篇) (轉)

worldblog發表於2007-12-08
使用XML實現BBS(主題列表篇) (轉)[@more@]

 

 

沐楓(初稿)

表A:

  • 1-0-1,this is a test
    • 3-1-1,this is a test
      • 4-3-1,this is a test
      • 5-3-1,this is a test
  • 2-0-2,this is a test

上面是BBS主題列表的一個例子。一般來說,假如不是使用(Oracle 有一條查詢語句可以自動生成家族樹,請查閱 ... start  with ... connect by ...語句),那麼如何實現上例的列表是一件費事的工作(相信許多員都寫過)。

如果我們改用來實現,那麼結果會怎麼樣呢?

現在我們使用"Select * from bbs"從中查詢貼子,並以XML格式返回(如果你是用ADO,那麼可以用其RecordSet.Save ... adPersistXML直接生成,當然如果你不喜歡ADO生成的格式,可用程式生成,如本例):

表B:




  4-3-1,this is a test
  slddfjslajfsdljf


  5-3-1,this is a test
  slddfjslajfsdljf


  3-1-1,this is a test
  slddfjslajfsdljf


  1-0-1,this is a test
  slddfjslajfsdljf


  2-0-2,this is a test
  slddfjslajfsdljf

說明:這裡sid是貼子的id號,pid是貼子的父id號。title是標題,content是貼子的內容。
上表中第二行是指定使用b.XSL來轉換XML內容。這是提供給的資訊。假如你使用XML,那麼可以不要這條資訊。
我們再來看看將上表的XML內容顯示成表A形式的XSL是怎麼實現的:

表C: b.XSL


 

 

 

現在,你將表B的內容存為abc.xml,將表C的內容存為b.xsl,然後在IE5中開啟,你就可以看到和表A一樣的內容了。

因此可以看出,XSL檔案解定了最終的顯示結果。假如你有多個子論壇,那麼無需更改論壇程式,只要為各個子論壇提供不同XSL檔案,就可以讓各個子論壇的版而不論風格畫面還是主題排列都會具有獨特的表現。如果提供免費論壇服務,那麼允許論壇申請者定製自已的XSL檔案將是一個良好的選擇。
但是假如客戶端不支援XML,該怎麼辦呢?答案很簡單,由服務端先將XML轉換成HTML,再傳到客戶端。

下面我們以IIS4/5+IE5+來實現這個例子(必需IE5):


  Set rsXML=Server.Create("ADO.RecordSet");
  s = “SELECT * from bbs"
  nn = “你自個兒寫”
  rsXML.CursorLocation = adUseClient
  rsXML.Open sSQL, sConn, adOpenStatic
 
  //指定XSL檔案位置
  var styleFile = Server.MapPath("simple.xsl");

  // Save the XML to XMLDOM
  var = Server.CreateObject(".XMLDOM");
'  rsXML.Save source, adPersistXML
'我相當不喜歡ADO直接Save出來的XML文件,我總是這樣做:

Dim GetData,v
  GetData = GetData & ""
  while not RS_ForumInfo.EOF 
  GetData = GetData & ""
  for i = 0 to RS_ForumInfo.Fields.Count -1
  set v = RS_ForumInfo.Fields.Item(i)
  if (v.Type=201)or(v.Type=203)or(v.Type=205) then
  GetData = GetData& "" &_
  "" &_
  "" & RS_ForumInfo.Fields.Item(i).Name &">"
  else
  GetData = GetData& "" &_
  RS_ForumInfo.Fields.Item(i).Value &_
  "" & RS_ForumInfo.Fields.Item(i).Name &">"
  end if
  set v = Nothing
  next
  GetData = GetData & "
"
  RS_ForumInfo.MoveNext
  wend
 
  GetData = GetData & "
"

  source.loadXML GetData

  // Load the XSL
  var style = Server.CreateObject("Microsoft.XMLDOM");
  style.async = false;
  style.load(styleFile);

  Response.Write(source.tranormNode(style));
%>

當然,由於此處為了簡便,直接使用ADO來生成XML,因此simple.xsl和上面的b.xsl是不同的。
讀者可以參考上例和XSL參考資料(2000年的MSDN有比較詳細的XML/XSL SDK文件)來編寫。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-989734/,如需轉載,請註明出處,否則將追究法律責任。

相關文章