- 使用XML存储的数据给我们带来了极大的方便,而且,XML是跟平台无关的。利用XSLT可以将XML转换成任意格式的文档,比如HTML。另外还可以使用这种方法来实现跨平台浏览器(IE,火狐,WAP浏览器等)的支持。比如用如下ASP代码获取客户端浏览器类型:
- <%
- Dim objBrowsCap
- Set objBrowsCap = Server.CreateObject("MSWC.BrowserType")
- %>
- 浏览器(Browser):<%=objBrowsCap.browser%>
- 浏览器版本(Version):<%=objBrowsCap.version%>
- 然后通过判断浏览器的类型来使用不同的XSLT对你的XML数据进行转换。
- 下面是转换XML的方法:
- <%
- 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
- %>
- 参数xmlPath指定将被转换的XML的文件名。
- 参数xsltPath指定xls的文件名。
- 下面是将XML转换成HTML的一个实例:
- 1、 XML存储的数据文件(table.xml):
- <?xml version="1.0" encoding="utf-8" ?>
- <Items>
- <Item>
- <Url>http://blog.163.com/lxd_201/</Url>
- <Title>☆聊ゾ聊☆</Title>
- </Item>
- <Item>
- <Url>http://blog.163.com/lxd_201/</Url>
- <Title>☆聊ゾ聊☆</Title>
- </Item>
- <Item>
- <Url>http://blog.163.com/lxd_201/</Url>
- <Title>☆聊ゾ聊☆</Title>
- </Item>
- <Item>
- <Url>http://blog.163.com/lxd_201/</Url>
- <Title>☆聊ゾ聊☆</Title>
- </Item>
- <Item>
- <Url>http://blog.163.com/lxd_201/</Url>
- <Title>☆聊ゾ聊☆</Title>
- </Item>
- <Item>
- <Url>http://blog.163.com/lxd_201/</Url>
- <Title>☆聊ゾ聊☆</Title>
- </Item>
- <Item>
- <Url>http://blog.163.com/lxd_201/</Url>
- <Title>☆聊ゾ聊☆</Title>
- </Item>
- <Item>
- <Url>http://blog.163.com/lxd_201/</Url>
- <Title>☆聊ゾ聊☆</Title>
- </Item>
- <Item>
- <Url>http://blog.163.com/lxd_201/</Url>
- <Title>☆聊ゾ聊☆</Title>
- </Item>
- <Item>
- <Url>http://blog.163.com/lxd_201/</Url>
- <Title>☆聊ゾ聊☆</Title>
- </Item>
- </Items>
- 2、 XSLT文件(table.xsl):
- <?xml version="1.0" encoding="UTF-8"?>
- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:copyRight="http://xml.sz.luohuedu.net/">
- <xsl:template match="/">
- <!-- 定义常量 -->
- <xsl:variable name="strTrLeft" select="'<tr>'"/>
- <xsl:variable name="strTrRight" select="'</tr>'"/>
- <!-- 计算总记录数 -->
- <xsl:variable name="nTotal" select="count(/Items/Item)"/>
- <!-- 定义列数 -->
- <xsl:variable name="nCols" select="4"/>
- <!-- 当最后一行输出的单元格小于实际的列数的时候,用空内容补齐所缺的单元格。计算需要的补齐的列数 -->
- <xsl:variable name="nLefted" select="$nCols - ($nTotal mod $nCols)"/>
- <!-- 计算不需要补齐的行数 -->
- <xsl:variable name="nNotProcessedRow" select="$nTotal - ($nTotal mod $nCols)"/>
- <table bgcolor="snow" border="1" cellpadding="5" cellspacing="2" borderColor="blue"
- style="font-size:9pt">
- <!-- 对于不需要补齐的行数,直接输出 -->
- <xsl:for-each select="/Items/Item[position() < $nNotProcessedRow +1]">
- <xsl:if test="position() mod $nCols = 1">
- <xsl:value-of select="$strTrLeft" disable-output-escaping="yes"/>
- </xsl:if>
- <td>
- <a target="_blank">
- <xsl:attribute name="href">
- <xsl:if test="contains(Url,'@')">mailto:</xsl:if>
- <xsl:value-of select="Url"/>
- </xsl:attribute>
- <xsl:value-of select="Title"/>
- </a>
- </td>
- <xsl:if test="position() mod $nCols = 0">
- <xsl:value-of select="$strTrRight" disable-output-escaping="yes"/>
- </xsl:if>
- </xsl:for-each>
- <!-- 转换除去不需要补齐的记录的剩余记录 -->
- <xsl:if test="$nLefted != 0 and $nLefted != $nCols">
- <xsl:value-of select="$strTrLeft" disable-output-escaping="yes"/>
- <xsl:for-each select="/Items/Item[position() >$nNotProcessedRow]">
- <td>
- <a target="_blank">
- <xsl:attribute name="href">
- <xsl:if test="contains(Url,'@')">mailto:</xsl:if>
- <xsl:value-of select="Url"/>
- </xsl:attribute>
- <xsl:value-of select="Title"/>
- </a>
- </td>
- </xsl:for-each>
- <!--
- 如果nLefted不等于0和列数,则需要进行补齐,这里进行递归调用,需要传递的参数有两个:
- nLefted:要补齐的列数;
- nCols:表格的列数。
- -->
- <xsl:call-template name="MyFun">
- <xsl:with-param name="nLefted" select="$nLefted"/>
- <xsl:with-param name="nCols" select="$nCols"/>
- </xsl:call-template>
- <xsl:value-of select="$strTrRight" disable-output-escaping="yes"/>
- </xsl:if>
- </table>
- <p>
- <xsl:value-of select="$nTotal"/>
- </p>
- </xsl:template>
- <xsl:template name="MyFun">
- <xsl:param name="nLefted"/>
- <xsl:param name="nCols"/>
- <xsl:if test=" $nLefted != 0 and $nLefted != $nCols">
- <td>
- <xsl:text disable-output-escaping="yes"> </xsl:text>
- </td>
- <xsl:call-template name="MyFun">
- <xsl:with-param name="nLefted" select="$nLefted - 1"/>
- <xsl:with-param name="nCols" select="$nCols"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:template>
- </xsl:stylesheet>
- 3、 ASP代码(index.asp):
- <%
- 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
- %>
- <%
- htmlResult=Transform("table.xml","table.xsl")
- response.Write(htmlResult)
- %>
复制代码
|