|
服务器端的生成的页面数据,为了提高访问速度,往往需要生成静态的htm页面。通常,可以使用fso生成静态的htm页。但如果是fso被禁止或没有使用fso的权限,就需要其他的方法来解决。利用XMLdom,使用其save()方法就是一个很好的解决之道。而且,如果数据是xml格式,使用save()比使用fso速度要快,代码的复用率也高。 但需要注意的是:调用xmldom.save()方法时,默认的编码方式是"uft-8"。如果指定文档输出类型为"html",由于其不可指定编码类型,当数据中含有中文字符,就会发现保存的htm数据中,所有中文字符都变成了乱码. 解决方法: 机制,通常浏览器对于html类型的页面,对于htm标记以外的标记并不进行解释。 a.指定输出文档类型为"xml" b.指定编码(encoding="gb2312") c.指定保留缩进格式(以方便阅读) examples: /*** create.ASP ***/ <% dimcXMLFile,cXSLFile dimoXML,XSL dimoOutput dimcHtmLFile,cOutputFile cHtmLFile="book.htm" 'cHtmLFile="book_"&replace(replace(replace(now,":",""),"-",""),"","")&".htm" cXMLFile=Server.MapPath("book.xml") cXSLFile=Server.MapPath("book.xsl") cOutputFile=Server.MapPath(cHtmLFile) SetoXML=Server.CreateObject("Microsoft.XMLDOM") oXML.async=false oXML.load(cXMLFile) SetoXSL=Server.CreateObject("Microsoft.XMLDOM") oXSL.async=false oXSL.load(cXSLFile) SetoOutput=Server.CreateObject("Microsoft.XMLDOM") CalloXML.transformNodeToObject(oXSL,oOutput) oOutput.save(cOutputFile) SetoXML=Nothing SetoXSL=Nothing SetoOutput=Nothing Response.redirect(cHtmLFile) %> | /*** book.xml ***/ <?xmlversion="1.0"encoding="gb2312"?> <?xml-stylesheettype="text/xsl"href="book.xsl"?> <moonpiazza> <book> <书名>基于XML的ASP.NET开发</书名> <定价>42</定价> <作者>DanWahlin/王宝良</作者> </book> <book> <书名>XML应用的UML建模技术</书名> <定价>32</定价> <作者>DavidCarlson/周靖侯奕萌沈金河等</作者> </book> <book> <书名>极限编程研究</书名> <定价>70</定价> <作者>GiancarrioSucci/MicheleMarchesi/张辉(译)</作者> </book> <book> <书名>DesignPatterns</书名> <定价>38</定价> <作者>ErichGamma/RichardHelm/RalphJohnson/JohnVlissides</作者> </book> </moonpiazza> | /*** book.xsl ***/
<?xmlversion="1.0"encoding="gb2312"?> <xsl:stylesheetxmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="1.0"> <!--下面一句必须--> <xsl:outputmethod="xml"encoding="gb2312"indent="yes"/> <xsl:templatematch="/"> <html> <metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/> <!--bymoonpiazza2007.12.13--> <body> <tableborder="1"> <tr> <xsl:for-eachselect="moonpiazza/book[position()=1]/*"> <td><xsl:value-ofselect="name()"/></td> </xsl:for-each> </tr> <xsl:for-eachselect="moonpiazza/book"> <tr> <xsl:for-eachselect="./*"> <td><xsl:value-ofselect="."/></td> </xsl:for-each> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet> |
|