테이블 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 문서가 있음)를 참조하여 작성할 수 있습니다. (끝)
위 내용은 XML을 이용한 BBS 구현(주제 목록)에 대한 자세한 소개입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!