主頁 > 知識庫 > 使用XML實(shí)現(xiàn)BBS(主題列表篇)

使用XML實(shí)現(xiàn)BBS(主題列表篇)

熱門標(biāo)簽:本地電話機(jī)器人 r語言數(shù)據(jù)可視化地圖標(biāo)注 東營電銷 如何修改多個百度地圖標(biāo)注 南寧網(wǎng)絡(luò)外呼系統(tǒng)運(yùn)營商 隨州外呼調(diào)研系統(tǒng) 高德地圖地圖標(biāo)注服務(wù)中心 400電話辦理包年 微信地圖標(biāo)注合并了
表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(Oracle 有一條查詢語句可以自動生成家族樹,請查閱Select ... startwith ... connect by ...語句),那么如何實(shí)現(xiàn)上例的列表是一件費(fèi)事的工作(相信許多程序員都寫過)。
  如果我們改用XML來實(shí)現(xiàn),那么結(jié)果會怎么樣呢?
  現(xiàn)在我們使用"Select * from bbs"從數(shù)據(jù)庫中查詢貼子,并以XML格式返回(如果你是用ADO,那么可以用其RecordSet.Save ... adPersistXML直接生成,當(dāng)然如果你不喜歡ADO生成的格式,可用程序生成,如本例):
  表B:
  ?xml version="1.0"?>
  ?xml-stylesheet type="text/xsl" href="b.xsl"?>
  bbs>
  post sid="4" pid="3" aid="1">
  title>4-3-1,this is a test/title>
  content>slddfjslajfsdljf/content>
  /post>
  post sid="5" pid="3" aid="1">
  title>5-3-1,this is a test/title>
  content>slddfjslajfsdljf/content>
  /post>
  post sid="3" pid="1" aid="1">
  title>3-1-1,this is a test/title>
  content>slddfjslajfsdljf/content>
  /post>
  post sid="1" pid="0" aid="1">
  title>1-0-1,this is a test/title>
  content>slddfjslajfsdljf/content>
  /post>
  post sid="2" pid="0" aid="2">
  title>2-0-2,this is a test/title>
  content>slddfjslajfsdljf/content>
  /post>
  /bbs>
  說明:這里sid是貼子的id號,pid是貼子的父id號。title是標(biāo)題,content是貼子的內(nèi)容。
  上表中第二行是指定使用b.XSL來轉(zhuǎn)換XML內(nèi)容。這是提供給IE5的信息。假如你使用XMLDOM,那么可以不要這條信息。
  我們再來看看將上表的XML內(nèi)容顯示成表A形式的XSL文件是怎么實(shí)現(xiàn)的:
  表C:b.XSL
  ?xml version=''1.0''?>
  xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
  xsl:template match="/">
  html>
  body>
   xsl:apply-templates select="*"/>
  /body>
  /html>
  /xsl:template>
  xsl:template match="post">
  li>
   div>
   xsl:attribute name="title">xsl:value-of select="content"/>/xsl:attribute>
   xsl:value-of select="title"/>
   xsl:if test="/bbs/post[@pid=context()/@sid]">
   xsl:element name="ul">
   xsl:apply-templates select="/bbs/post[@pid=context()/@sid]"/>
   /xsl:element>
   /xsl:if>
   /div>
  /li>
  /xsl:template>
  xsl:template match="bbs">
  ul>
  xsl:apply-templates select="post[@pid=0]"/>
  /ul>
  /xsl:template>
  /xsl:stylesheet>
  現(xiàn)在,你將表B的內(nèi)容存為abc.xml,將表C的內(nèi)容存為b.xsl,然后在IE5中打開,你就可以看到和表A一樣的內(nèi)容了。
  因此可以看出,XSL文件解定了最終的顯示結(jié)果。假如你有多個子論壇,那么無需更改論壇程序,只要為各個子論壇提供不同XSL文件,就可以讓各個子論壇的版而不論風(fēng)格畫面還是主題排列都會具有獨(dú)特的表現(xiàn)。如果提供免費(fèi)論壇服務(wù),那么允許論壇申請者定制自已的XSL文件將是一個良好的選擇。
  但是假如客戶端不支持XML,該怎么辦呢?答案很簡單,由服務(wù)端先將XML轉(zhuǎn)換成HTML,再傳到客戶端。
  下面我們以IIS4/5+IE5+ASP來實(shí)現(xiàn)這個例子(服務(wù)器必需安裝IE5):
  %@ LANGUAGE = JScript %>
  %
  Set rsXML=Server.CreateObject("ADODB.RecordSet");
  sSQL = “SELECT * from bbs"
  sConn = “你自個兒寫”
  rsXML.CursorLocation = adUseClient
  rsXML.Open sSQL, sConn, adOpenStatic
  //指定XSL文件位置
  var styleFile = Server.MapPath("simple.xsl");
  // Save the XML to XMLDOM
  var source = Server.CreateObject("Microsoft.XMLDOM");
  ''rsXML.Save source, adPersistXML
  ''我相當(dāng)不喜歡ADO直接Save出來的XML文檔,我總是這樣做:
  Dim GetData,v
  GetData = GetData "bbs>"
  while not RS_ForumInfo.EOF
  GetData = GetData "post>"
  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 ">" _
  "![CDATA[" RS_ForumInfo.Fields.Item(i).Value "]]>" _
  "/" RS_ForumInfo.Fields.Item(i).Name ">"
  else
  GetData = GetData "" RS_ForumInfo.Fields.Item(i).Name ">" _
  RS_ForumInfo.Fields.Item(i).Value _
  "/" RS_ForumInfo.Fields.Item(i).Name ">"
  end if
  set v = Nothing
  next
  GetData = GetData "/post>"
  RS_ForumInfo.MoveNext
  wend
  GetData = GetData "/bbs>"
  source.loadXML GetData
  // Load the XSL
  var style = Server.CreateObject("Microsoft.XMLDOM");
  style.async = false;
  style.load(styleFile);
  Response.Write(source.transformNode(style));
  %>
  當(dāng)然,由于此處為了簡便,直接使用ADO來生成XML,因此simple.xsl和上面的b.xsl是不同的。
  讀者可以參考上例和XSL參考資料(2000年的MSDN有比較詳細(xì)的XML/XSL SDK文檔)來編寫。(完)

標(biāo)簽:宿遷 西雙版納 果洛 寧夏 拉薩 黃石 益陽 德州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《使用XML實(shí)現(xiàn)BBS(主題列表篇)》,本文關(guān)鍵詞  使用,XML,實(shí)現(xiàn),BBS,主題,列表,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《使用XML實(shí)現(xiàn)BBS(主題列表篇)》相關(guān)的同類信息!
  • 本頁收集關(guān)于使用XML實(shí)現(xiàn)BBS(主題列表篇)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章