Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Einführung in die Verwendung von XML zur Implementierung von BBS (Themenliste)

Detaillierte Einführung in die Verwendung von XML zur Implementierung von BBS (Themenliste)

黄舟
黄舟Original
2017-03-04 17:12:331599Durchsuche

Tabelle 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

Das Obige ist ein Beispiel für eine BBS-Themenliste. Wenn Sie Oracle nicht verwenden (Oracle verfügt über eine Abfrageanweisung, die automatisch einen Stammbaum generieren kann, überprüfen Sie bitte die Anweisung Select ... startwith ... connect by ...), wie Sie die Liste im Allgemeinen implementieren Das obige Beispiel ist eine mühsame Aufgabe (ich glaube, viele Programmierer haben dies geschrieben).
Was wird das Ergebnis sein, wenn wir stattdessen XML verwenden?
Jetzt verwenden wir „Select * from bbs“, um Beiträge aus der Datenbank abzufragen und sie im XML-Format zurückzugeben (wenn Sie ADO verwenden, können Sie dessen RecordSet.Save... adPersistXML verwenden, um sie direkt zu generieren. Natürlich, Wenn es Ihnen nicht gefällt, kann das von ADO generierte Format von einem Programm wie diesem Beispiel generiert werden):
Tabelle 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>

Hinweis: Sid hier ist das ID-Nummer des Beitrags und pid ist die übergeordnete ID der Beitragsnummer. title ist der Titel und content ist der Inhalt des Beitrags.
Die zweite Zeile in der obigen Tabelle gibt die Verwendung von b.XSL zum Konvertieren von XML-Inhalten an. Dies sind die Informationen, die IE5 bereitgestellt werden. Wenn Sie XMLDOM verwenden, benötigen Sie diese Nachricht nicht.
Sehen wir uns an, wie der XML-Inhalt der obigen Tabelle in einer XSL-Datei in Form von Tabelle A angezeigt wird:
Tabelle C: b.XSL

<?xml version=&#39;&#39;1.0&#39;&#39;?>
  <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>

Wenn Sie nun den Inhalt von Tabelle B als abc.xml speichern, den Inhalt von Tabelle C als b.xsl speichern und ihn dann in IE5 öffnen, können Sie denselben Inhalt wie in Tabelle A sehen.
Es ist also ersichtlich, dass die XSL-Datei das endgültige Anzeigeergebnis bestimmt. Wenn Sie über mehrere Unterforen verfügen, ist es nicht erforderlich, das Forenprogramm zu ändern. Solange Sie für jedes Unterforum unterschiedliche XSL-Dateien bereitstellen, können Sie dafür sorgen, dass jedes Unterforum unabhängig von Stil, Bildschirm usw. eine einzigartige Leistung aufweist Themenanordnung. Wenn kostenlose Forendienste bereitgestellt werden, wäre es eine gute Wahl, Forumsantragstellern die Möglichkeit zu geben, ihre eigenen XSL-Dateien anzupassen.
Was aber, wenn der Client XML nicht unterstützt? Die Antwort ist einfach: Der Server wandelt XML zunächst in HTML um und übermittelt es dann an den Client.
Als nächstes verwenden wir IIS4/5+IE5+asp, um dieses Beispiel zu implementieren (auf dem Server muss IE5 installiert sein):

<%@ 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");
  &#39;&#39;rsXML.Save source, adPersistXML
  &#39;&#39;我相当不喜欢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));
  %>

Der Einfachheit halber ist hier natürlich ADO angegeben Wird direkt zum Generieren von XML verwendet, daher sind simple.xsl und b.xsl oben unterschiedlich.
Leser können sich zum Schreiben auf das obige Beispiel und XSL-Referenzmaterial beziehen (MSDN im Jahr 2000 verfügt über ein detaillierteres XML/XSL-SDK-Dokument). (Ende)

Das Obige ist die detaillierte Einführung in die Verwendung von XML zur Implementierung von BBS (Themenliste). Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn