`
isiqi
  • 浏览: 16029543 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

利用XSLT把ADO记录集转换成XML(3)[转载]

阅读更多
利用XSLT把ADO记录集转换成XML(3)
http://www.51cto.com 2005-11-04 09:36 出处:51cto.com整理
ADO自动产生的XML包含了schema信息,它描述这个XML里允许有什么节点和属性以及采用何种数据类型,而且数据节点也增加了名称空间。schema信息在需要数据验证的地方或进行更复杂的处理或许很有用,但是,大多数情况下,我们使用的是瘦客户机,我们不需要schema信息。我们可以利用XSLT来分离出我们想要的信息,去掉多余的信息。因此,我们编写下面的“ DataCleaner.xsl”:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"

xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"

xmlns:rs="urn:schemas-microsoft-com:rowset"

xmlns:z="#RowsetSchema">

<xsl:output omit-xml-declaration="yes"/>

<xsl:template match="/">

<xsl:element name="xml">

<xsl:for-each select="/xml/rs:data/z:row">

<xsl:element name="row">

<xsl:for-each select="@*">

<xsl:element name="{name()}">

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

</xsl:element>

</xsl:for-each>

</xsl:element>

</xsl:for-each>

</xsl:element>

</xsl:template>

</xsl:stylesheet>

这个XSLT具有可重用的特性,对于不同的查询结果都适用,下面就是如何使用这个XSLT的例子:

<%

Dim strCleanXML, objXMLDOM_XSLT

Set objXMLDOM_XSLT = CreateObject("MSXML2.DOMDocument")

objXMLDOM_XSLT.load(Server.MapPath("DataCleaner.xsl"))

strCleanXML = objXMLDOM.transformNode(objXMLDOM_XSLT)

Set objXMLDOM = Nothing

Set objXMLDOM_XSLT = Nothing

%>

经过上面的处理以后,strClaenXML就是我们所想要的XML字符串了。

<xml>

<row>

<ProductName>Chai</ProductName>

<UnitPrice>18</UnitPrice>

<UnitsInStock>39</UnitsInStock>

</row>

<row>

<ProductName>Konbu</ProductName>

<UnitPrice>6</UnitPrice>

<UnitsInStock>24</UnitsInStock>

</row>

</xml>

上面这种格式的XML字符串是我们经常见到的节点集的样式,如果您不想把字段处理成节点,而把它处理成属性节点,那么我们只需对DataCleaber.xsl稍加改动即可:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"

xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"

xmlns:rs="urn:schemas-microsoft-com:rowset"

xmlns:z="#RowsetSchema">

<xsl:output omit-xml-declaration="yes"/>

<xsl:template match="/">

<xsl:element name="xml">

<xsl:for-each select="/xml/rs:data/z:row">

<xsl:element name="row">

<xsl:for-each select="@*">

<xsl:attribute name="{name()}">

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

</xsl:attribute>

</xsl:for-each>

</xsl:element>

</xsl:for-each>

</xsl:element>

</xsl:template>

</xsl:stylesheet>

以下是采用了新样式的结果,它比用节点表示字段的长度要短的多了。传输起来速度会更快:

<xml>

<row ProductName="Chai" UnitPrice="18" UnitsInStock="39"/>

<row ProductName="Konbu" UnitPrice="6" UnitsInStock="24"/>

</xml>

到此为止,我们介绍了从ADO 记录集得到XML格式数据的几种办法,也得到了最简化的字符串。但是有几个问题你仍然需要注意,有些字段值还有XML里不支持的字符,比如:"'<>&,象P&G宝洁公司的名称,Chef Anton's Gumbo Mix产品名字等,在做转换时要进行编码处理。在Microsoft ADO 2.6的SDK里有使用save方法时要注意的问题:1,save方法只对open Recordset起作用;2,不支持带有adVariant,adIDispatch,adIUnknown类型的字段的记录集的savw;3,当保存分级的记录集( data shapes)有两个限制:不能保存参数化和含有未解决的更新的记录集。

为了更进一步提高性能,你可以把转换工作放到COM/COM+组件中, ASP代码只进行数据的最终表现即可。把业务层、数据层和表现层分开,ASP只需要调用数据组件,数据组件调用数据库的存储过程,把结果转换成XML,最后只把简单的XML字符环串回到ASP程序里,ASP就可以用XSLT把XML进行转换,把结果送到浏览器。

分享到:
评论

相关推荐

    利用XSLT把ADO记录集转换成XML

    用3种方式把我们得到的记录集转换成XML格式: 1)可以遍历整个记录集,采用XML DOM(Document Object Model),建立XML节点树; 2)第二个办法,遍历记录集,直接生成XML字符串本身; 3)第三种方法:可重用的方法。

    使用XSLT将ADO记录集转换为定界文件

    将所有XML持久化的ADO Recordset转换为带分隔符的文本文件。

    ASP.NET4高级程序设计(第4版) 3/3

    15.1.2 把页面转换成用户控件 522 15.2 为用户控件添加代码 523 15.2.1 处理事件 523 15.2.2 添加属性 524 15.2.3 使用自定义对象 525 15.2.4 添加事件 528 15.2.5 公开内部Web控件 530 15.3 动态...

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    15.1.2 把页面转换成用户控件 15.2 为用户控件添加代码 15.2.1 处理事件 15.2.2 添加属性 15.2.3 使用自定义对象 15.2.4 添加事件 15.2.5 公开内部Web控件 15.3 动态加载用户控件 15.4 局部页面...

    Visual.Basic.2010.&.NET4.高级编程(第6版)-文字版.pdf

    9.5.1 使用xslt转换不同的xml标准 367 9.5.2 system.xml.xsl中定义的其他类和接口 370 9.6 asp.net中的xml 370 9.6.1 xmldatasource服务器控件 370 9.6.2 xmldatasource控件的名称空间问题 374 9.6.3 xml...

    asp.net知识库

    XSLT与XML转换的详细介绍 功能应用 读写搜索 基础教程 RSS Web2.0时代,RSS你会用了吗?(技术实现总结) 知识集锦:三分钟全面了解 Blog 和 RSS C#+ASP.NET开发基于Web的RSS阅读器 ASP.NET RSS Toolkit(RSS工具) ...

    ASP.NET 3.5 开发大全word课件

    11.1.3 将Web窗体转换成用户控件 11.2 自定义控件 11.2.1 实现自定义控件 11.2.2 复合自定义控件 11.3 用户控件和自定义控件的异同 11.4 用户控件示例 11.4.1 ASP.NET登录控件 11.4.2 ASP.NET登录控件的开发 11.4.3 ...

    ASP.NET3.5从入门到精通

    11.1.3 将Web 窗体转换成用户控件 11.2 自定义控件 11.2.1 实现自定义控件 11.2.2 复合自定义控件 11.3 用户控件和自定义控件的异同 11.4 用户控件示例 11.4.1 ASP.NET 登录控件 11.4.2 ASP.NET 登录控件的开发 ...

    ASP.NET 3.5 开发大全11-15

    11.1.3 将Web窗体转换成用户控件 11.2 自定义控件 11.2.1 实现自定义控件 11.2.2 复合自定义控件 11.3 用户控件和自定义控件的异同 11.4 用户控件示例 11.4.1 ASP.NET登录控件 11.4.2 ASP.NET登录控件的开发 11.4.3 ...

    ASP.NET 3.5 开发大全

    11.1.3 将Web窗体转换成用户控件 11.2 自定义控件 11.2.1 实现自定义控件 11.2.2 复合自定义控件 11.3 用户控件和自定义控件的异同 11.4 用户控件示例 11.4.1 ASP.NET登录控件 11.4.2 ASP.NET登录控件的开发 11.4.3 ...

    ASP.NET 3.5 开发大全1-5

    11.1.3 将Web窗体转换成用户控件 11.2 自定义控件 11.2.1 实现自定义控件 11.2.2 复合自定义控件 11.3 用户控件和自定义控件的异同 11.4 用户控件示例 11.4.1 ASP.NET登录控件 11.4.2 ASP.NET登录控件的开发 11.4.3 ...

    ASPNET35开发大全第一章

    11.1.3 将Web窗体转换成用户控件 11.2 自定义控件 11.2.1 实现自定义控件 11.2.2 复合自定义控件 11.3 用户控件和自定义控件的异同 11.4 用户控件示例 11.4.1 ASP.NET登录控件 11.4.2 ASP.NET登录控件的开发 11.4.3 ...

    asp.net专家疑难解答200问源码

    86.如何使用XML控件显示XML文件和进行XSLT转换 87.如何使用AdRotator Web控件制作广告发布程序-示例1 87.如何使用AdRotator Web控件制作广告发布程序-示例2 88.如何创建用户控件 89.如何将Web窗体转换成用户控件...

    asp.net专家疑难解答200问

    如何使用XML控件显示XML文件和进行XSLT转换 87.如何使用AdRotator Web控件制作广告发布程序-示例1 87.如何使用AdRotator Web控件制作广告发布程序-示例2 88.如何创建用户控件 89.如何将Web窗体转换...

Global site tag (gtag.js) - Google Analytics