使用xmldom在服务器端生成静态html页面

服务器端的生成的页面数据,为了提高访问速度,往往需要生成静态的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 ***/

 1   
 2dim cXMLFile, cXSLFile   
 3dim oXML, XSL   
 4dim oOutput   
 5dim cHtmLFile, cOutputFile 
 6
 7  
 8cHtmLFile = \"book.htm\"   
 9\'cHtmLFile = \"book_\" & replace( replace( replace (now,\":\",\"\"), \"-\", \"\"), \" \", \"\") & \".htm\" 
10
11cXMLFile = Server.MapPath(\"book.xml\")   
12cXSLFile = Server.MapPath(\"book.xsl\")   
13cOutputFile = Server.MapPath(cHtmLFile) 
14
15Set oXML = Server.CreateObject(\"Microsoft.XMLDOM\")   
16oXML.async = false   
17oXML.load(cXMLFile) 
18
19Set oXSL = Server.CreateObject(\"Microsoft.XMLDOM\")   
20oXSL.async = false   
21oXSL.load(cXSLFile) 
22
23Set oOutput = Server.CreateObject(\"Microsoft.XMLDOM\")   
24Call oXML.transformNodeToObject(oXSL, oOutput) 
25
26oOutput.save (cOutputFile) 
27
28Set oXML = Nothing   
29Set oXSL = Nothing   
30Set oOutput = Nothing 
31
32Response.redirect(cHtmLFile)   

/*** book.xml ***/

 1<moonpiazza>
 2<book>   
 3&lt;书名&gt;基于XML 的 ASP.NET开发<!--书名-->   
 4&lt;定价&gt;42<!--定价-->   
 5&lt;作者&gt;Dan Wahlin/王宝良<!--作者-->
 6</book>
 7<book>   
 8&lt;书名&gt;XML应用的UML建模技术<!--书名-->   
 9&lt;定价&gt;32<!--定价-->   
10&lt;作者&gt;David Carlson/周靖 侯奕萌 沈金河等<!--作者-->
11</book>
12<book>   
13&lt;书名&gt;极限编程研究<!--书名-->   
14&lt;定价&gt;70<!--定价-->   
15&lt;作者&gt;Giancarrio Succi/Michele Marchesi/张辉(译)<!--作者-->
16</book>
17<book>   
18&lt;书名&gt;Design Patterns<!--书名-->   
19&lt;定价&gt;38<!--定价-->   
20&lt;作者&gt;Erich Gamma/Richard Helm/Ralph Johnson/John Vlissides<!--作者-->
21</book>
22</moonpiazza>

/*** book.xsl ***/

 1<xsl:stylesheet 1999="" \"="" _http:="" transform_="" version='\"1.0\"' www.w3.org="" xmlns:xsl='\"' xsl="">
 2<!-- 下面一句必须 -->
 3<xsl:output encoding='\"gb2312\"' indent='\"yes\"/' method='\"xml\"'>
 4<xsl:template match='\"/\"'>
 5<html>
 6<meta charset="utf-8" content='\"text/html;' http-equiv='\"Content-Type\"'/>
 7<!-- by moonpiazza 2003.6.13-->
 8<body>
 9<table border='\"1\"'>
10<tr>
11<xsl:for-each select='\"moonpiazza/book[position()=1]/*\"'>
12<td><xsl:value-of select='\"name()\"'></xsl:value-of></td>
13</xsl:for-each>
14</tr>
15<xsl:for-each select='\"moonpiazza/book\"'>
16<tr>
17<xsl:for-each select='\"./*\"'>
18<td><xsl:value-of select='\".\"'></xsl:value-of></td>
19</xsl:for-each>
20</tr>
21</xsl:for-each>
22</table>
23</body>
24</html>
25</xsl:template>
26</xsl:output></xsl:stylesheet>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus