国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > XML > 正文

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

2024-09-05 20:53:27
字體:
來源:轉載
供稿:網友
表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 ...語句),那么如何實現上例的列表是一件費事的工作(相信許多程序員都寫過)。
  如果我們改用XML來實現,那么結果會怎么樣呢?
  現在我們使用"Select * from bbs"從數據庫中查詢貼子,并以XML格式返回(如果你是用ADO,那么可以用其RecordSet.Save ... adPersistXML直接生成,當然如果你不喜歡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是標題,content是貼子的內容。
  上表中第二行是指定使用b.XSL來轉換XML內容。這是提供給IE5的信息。假如你使用XMLDOM,那么可以不要這條信息。
  我們再來看看將上表的XML內容顯示成表A形式的XSL文件是怎么實現的:
  表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>
  現在,你將表B的內容存為abc.xml,將表C的內容存為b.xsl,然后在IE5中打開,你就可以看到和表A一樣的內容了。
  因此可以看出,XSL文件解定了最終的顯示結果。假如你有多個子論壇,那么無需更改論壇程序,只要為各個子論壇提供不同XSL文件,就可以讓各個子論壇的版而不論風格畫面還是主題排列都會具有獨特的表現。如果提供免費論壇服務,那么允許論壇申請者定制自已的XSL文件將是一個良好的選擇。
  但是假如客戶端不支持XML,該怎么辦呢?答案很簡單,由服務端先將XML轉換成HTML,再傳到客戶端。
  下面我們以IIS4/5+IE5+ASP來實現這個例子(服務器必需安裝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
  ''我相當不喜歡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));
  %>
  當然,由于此處為了簡便,直接使用ADO來生成XML,因此simple.xsl和上面的b.xsl是不同的。
  讀者可以參考上例和XSL參考資料(2000年的MSDN有比較詳細的XML/XSL SDK文檔)來編寫。(完)
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 凉山| 那曲县| 文登市| 卫辉市| 元谋县| 琼中| 孟津县| 沾化县| 章丘市| 交口县| 广东省| 阳朔县| 德兴市| 平度市| 冀州市| 独山县| 双桥区| 荔浦县| 福州市| 邳州市| 康平县| 阿尔山市| 长丰县| 柳河县| 贵定县| 东辽县| 栾川县| 许昌市| 海晏县| 蓬莱市| 会东县| 门头沟区| 屏东市| 拜泉县| 珠海市| 获嘉县| 道孚县| 古交市| 田林县| 攀枝花市| 搜索|