>  기사  >  백엔드 개발  >  XML을 사용하여 BBS를 구현하는 방법에 대한 자세한 소개(주제 목록)

XML을 사용하여 BBS를 구현하는 방법에 대한 자세한 소개(주제 목록)

黄舟
黄舟원래의
2017-03-04 17:12:331647검색

테이블 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=&#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>

이제, 테이블 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");
  &#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));
  %>

물론 단순화를 위해 ADO가 직접 사용됩니다. XML을 생성하므로 simple.xsl은 위의 b.xsl과 다릅니다.
독자는 위의 예제와 XSL 참조 자료(2000년 MSDN에 더 자세한 XML/XSL SDK 문서가 있음)를 참조하여 작성할 수 있습니다. (끝)

위 내용은 XML을 이용한 BBS 구현(주제 목록)에 대한 자세한 소개입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.