时间: 2021-07-31 作者:daque
表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,尔后在ie第5国学翻开,你就无妨看到和表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布告档案)来编写。(完)