Maison  >  Article  >  développement back-end  >  Introduction détaillée à l'utilisation de XML pour implémenter BBS (liste de sujets)

Introduction détaillée à l'utilisation de XML pour implémenter BBS (liste de sujets)

黄舟
黄舟original
2017-03-04 17:12:331674parcourir

Tableau 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

Ce qui précède est un exemple de liste de sujets BBS. De manière générale, si vous n'utilisez pas Oracle (Oracle a une instruction de requête qui peut générer automatiquement un arbre généalogique, veuillez vérifier l'instruction Select ... startwith ... connect by ...), puis comment implémenter la liste dans le L'exemple ci-dessus est une tâche fastidieuse (je crois que de nombreux programmeurs ont écrit ceci).
Si on utilise plutôt du xml, quel sera le résultat ?
Nous utilisons maintenant "Select * from bbs" pour interroger les publications de la base de données et les renvoyer au format XML (si vous utilisez ADO, vous pouvez utiliser son RecordSet.Save... adPersistXML pour le générer directement. Bien sûr, si vous ne l'aimez pas, Le format généré par ADO peut être généré par un programme, comme cet exemple) :
Tableau 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>

Remarque : sid voici le numéro d'identification de la publication et pid est l'identifiant parent du numéro de publication. le titre est le titre et le contenu est le contenu du message.
La deuxième ligne du tableau ci-dessus spécifie l'utilisation de b.XSL pour convertir le contenu XML. Ce sont les informations fournies à IE5. Si vous utilisez XMLDOM, vous n'avez pas besoin de ce message.
Voyons comment afficher le contenu XML du tableau ci-dessus dans un fichier XSL sous la forme du Tableau A :
Tableau 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>

Maintenant, vous enregistrez le contenu de la table B sous abc.xml, enregistrez le contenu de la table C sous b.xsl, puis ouvrez-le dans IE5, vous pouvez voir le même contenu que la table A.
On constate donc que le fichier XSL détermine le résultat final de l'affichage. Si vous avez plusieurs sous-forums, il n'est pas nécessaire de modifier le programme du forum. Tant que vous fournissez des fichiers XSL différents pour chaque sous-forum, vous pouvez donner à chaque sous-forum des performances uniques quel que soit le style, l'écran ou. disposition thématique. Si des services de forum gratuits sont fournis, ce serait un bon choix de permettre aux candidats au forum de personnaliser leurs propres fichiers XSL.
Mais que se passe-t-il si le client ne prend pas en charge XML ? La réponse est simple. Le serveur convertit d'abord le XML en HTML puis le transmet au client.
Ensuite, nous utilisons IIS4/5 IE5 asp pour implémenter cet exemple (le serveur doit avoir IE5 installé) :

<%@ 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));
  %>

Bien sûr, par souci de simplicité ici, ADO est utilisé directement pour générer du XML, donc simple.xsl est différent de b.xsl ci-dessus.
Les lecteurs peuvent se référer à l'exemple ci-dessus et aux documents de référence XSL (MSDN en 2000 a un document SDK XML/XSL plus détaillé) pour écrire. (Fin)

Ce qui précède est une introduction détaillée à l'utilisation de XML pour implémenter BBS (liste de sujets). Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn