返回列表 回复 发帖

使ASP程序跨浏览器

  1. 使用XML存储的数据给我们带来了极大的方便,而且,XML是跟平台无关的。利用XSLT可以将XML转换成任意格式的文档,比如HTML。另外还可以使用这种方法来实现跨平台浏览器(IE,火狐,WAP浏览器等)的支持。比如用如下ASP代码获取客户端浏览器类型:


  2. <%

  3. Dim objBrowsCap

  4. Set objBrowsCap = Server.CreateObject("MSWC.BrowserType")

  5. %>

  6. 浏览器(Browser):<%=objBrowsCap.browser%>

  7. 浏览器版本(Version):<%=objBrowsCap.version%>


  8. 然后通过判断浏览器的类型来使用不同的XSLT对你的XML数据进行转换。


  9. 下面是转换XML的方法:


  10. <%

  11. function Transform(xmlPath,xsltPath) Dim result, xsltDocument,xmlDocument Set xmlDocument=CreateObject("MSXML2.DOMDocument") xmlDocument.load(Server.MapPath(xmlPath)) Set xsltDocument = CreateObject("MSXML2.DOMDocument") xsltDocument.load(Server.MapPath(xsltPath)) result = xmlDocument.transformNode(xsltDocument) Set objXMLDOM = Nothing Set objXMLDOM_XSLT = Nothing Transform=result end function

  12. %>


  13. 参数xmlPath指定将被转换的XML的文件名。

  14. 参数xsltPath指定xls的文件名。


  15. 下面是将XML转换成HTML的一个实例:

  16. 1、 XML存储的数据文件(table.xml):

  17. <?xml version="1.0" encoding="utf-8" ?>

  18. <Items>

  19. <Item>

  20. <Url>http://blog.163.com/lxd_201/</Url>

  21. <Title>☆聊ゾ聊☆</Title>

  22. </Item>

  23. <Item>

  24. <Url>http://blog.163.com/lxd_201/</Url>

  25. <Title>☆聊ゾ聊☆</Title>

  26. </Item>

  27. <Item>

  28. <Url>http://blog.163.com/lxd_201/</Url>

  29. <Title>☆聊ゾ聊☆</Title>

  30. </Item>

  31. <Item>

  32. <Url>http://blog.163.com/lxd_201/</Url>

  33. <Title>☆聊ゾ聊☆</Title>

  34. </Item>

  35. <Item>

  36. <Url>http://blog.163.com/lxd_201/</Url>

  37. <Title>☆聊ゾ聊☆</Title>

  38. </Item>

  39. <Item>

  40. <Url>http://blog.163.com/lxd_201/</Url>

  41. <Title>☆聊ゾ聊☆</Title>

  42. </Item>

  43. <Item>

  44. <Url>http://blog.163.com/lxd_201/</Url>

  45. <Title>☆聊ゾ聊☆</Title>

  46. </Item>

  47. <Item>

  48. <Url>http://blog.163.com/lxd_201/</Url>

  49. <Title>☆聊ゾ聊☆</Title>

  50. </Item>

  51. <Item>

  52. <Url>http://blog.163.com/lxd_201/</Url>

  53. <Title>☆聊ゾ聊☆</Title>

  54. </Item>

  55. <Item>

  56. <Url>http://blog.163.com/lxd_201/</Url>

  57. <Title>☆聊ゾ聊☆</Title>

  58. </Item>

  59. </Items>


  60. 2、 XSLT文件(table.xsl):

  61. <?xml version="1.0" encoding="UTF-8"?>

  62. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

  63. xmlns:copyRight="http://xml.sz.luohuedu.net/">

  64. <xsl:template match="/">

  65. <!-- 定义常量 -->

  66. <xsl:variable name="strTrLeft" select="'<tr>'"/>

  67. <xsl:variable name="strTrRight" select="'</tr>'"/>

  68. <!-- 计算总记录数 -->

  69. <xsl:variable name="nTotal" select="count(/Items/Item)"/>

  70. <!-- 定义列数 -->

  71. <xsl:variable name="nCols" select="4"/>

  72. <!-- 当最后一行输出的单元格小于实际的列数的时候,用空内容补齐所缺的单元格。计算需要的补齐的列数 -->

  73. <xsl:variable name="nLefted" select="$nCols - ($nTotal mod $nCols)"/>

  74. <!-- 计算不需要补齐的行数 -->

  75. <xsl:variable name="nNotProcessedRow" select="$nTotal - ($nTotal mod $nCols)"/>

  76. <table bgcolor="snow" border="1" cellpadding="5" cellspacing="2" borderColor="blue"

  77. style="font-size:9pt">

  78. <!-- 对于不需要补齐的行数,直接输出 -->

  79. <xsl:for-each select="/Items/Item[position() < $nNotProcessedRow +1]">

  80. <xsl:if test="position() mod $nCols = 1">

  81. <xsl:value-of select="$strTrLeft" disable-output-escaping="yes"/>

  82. </xsl:if>

  83. <td>

  84. <a target="_blank">

  85. <xsl:attribute name="href">

  86. <xsl:if test="contains(Url,'@')">mailto:</xsl:if>

  87. <xsl:value-of select="Url"/>

  88. </xsl:attribute>

  89. <xsl:value-of select="Title"/>

  90. </a>

  91. </td>

  92. <xsl:if test="position() mod $nCols = 0">

  93. <xsl:value-of select="$strTrRight" disable-output-escaping="yes"/>

  94. </xsl:if>

  95. </xsl:for-each>

  96. <!-- 转换除去不需要补齐的记录的剩余记录 -->

  97. <xsl:if test="$nLefted != 0 and $nLefted != $nCols">

  98. <xsl:value-of select="$strTrLeft" disable-output-escaping="yes"/>

  99. <xsl:for-each select="/Items/Item[position() >$nNotProcessedRow]">

  100. <td>

  101. <a target="_blank">

  102. <xsl:attribute name="href">

  103. <xsl:if test="contains(Url,'@')">mailto:</xsl:if>

  104. <xsl:value-of select="Url"/>

  105. </xsl:attribute>

  106. <xsl:value-of select="Title"/>

  107. </a>

  108. </td>

  109. </xsl:for-each>

  110. <!--

  111. 如果nLefted不等于0和列数,则需要进行补齐,这里进行递归调用,需要传递的参数有两个:

  112. nLefted:要补齐的列数;

  113. nCols:表格的列数。

  114. -->

  115. <xsl:call-template name="MyFun">

  116. <xsl:with-param name="nLefted" select="$nLefted"/>

  117. <xsl:with-param name="nCols" select="$nCols"/>

  118. </xsl:call-template>

  119. <xsl:value-of select="$strTrRight" disable-output-escaping="yes"/>

  120. </xsl:if>

  121. </table>

  122. <p>

  123. <xsl:value-of select="$nTotal"/>

  124. </p>

  125. </xsl:template>

  126. <xsl:template name="MyFun">

  127. <xsl:param name="nLefted"/>

  128. <xsl:param name="nCols"/>

  129. <xsl:if test=" $nLefted != 0 and $nLefted != $nCols">

  130. <td>

  131. <xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>

  132. </td>

  133. <xsl:call-template name="MyFun">

  134. <xsl:with-param name="nLefted" select="$nLefted - 1"/>

  135. <xsl:with-param name="nCols" select="$nCols"/>

  136. </xsl:call-template>

  137. </xsl:if>

  138. </xsl:template>

  139. </xsl:stylesheet>


  140. 3、 ASP代码(index.asp):

  141. <%

  142. function Transform(xmlPath,xsltPath)

  143. Dim result, xsltDocument,xmlDocument


  144. Set xmlDocument=CreateObject("MSXML2.DOMDocument")

  145. xmlDocument.load(Server.MapPath(xmlPath))


  146. Set xsltDocument = CreateObject("MSXML2.DOMDocument")

  147. xsltDocument.load(Server.MapPath(xsltPath))

  148. result = xmlDocument.transformNode(xsltDocument)


  149. Set objXMLDOM = Nothing

  150. Set objXMLDOM_XSLT = Nothing

  151. Transform=result

  152. end function

  153. %>


  154. <%

  155. htmlResult=Transform("table.xml","table.xsl")

  156. response.Write(htmlResult)

  157. %>
复制代码
返回列表 回复 发帖