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 #### 概述 在现代软件开发过程中,数据的处理和转换是一项重要的任务。随着互联网的发展,XML(可扩展标记语言)作为一种灵活的数据交换格式,被广泛应用于不同系统之间的数据...
标题中的“使用XSLT将ADO记录集转换为定界文件”是指利用XSL Transformations (XSLT) 技术,将ActiveX Data Objects (ADO) 的Recordset对象转换成以特定分隔符(如逗号、制表符等)分隔的文本文件。在数据处理和交换...
3. 将XML数据解析为记录集,或者使用XML数据类型创建新的SQL Server表。 4. 将记录集插入到数据库表中,或将数据库表数据转换为XML格式并写入文件。 在实际应用中,这些步骤可能需要根据具体需求进行调整和优化,...
最后,文档涉及了对ADO动态属性的操作,XSLT转换以及XML的安全考虑等高级话题。这部分内容帮助开发者扩展了ADO应用的可能性,比如通过XML DOM对象保存数据,或者对XML格式的记录集进行安全处理。 由于内容是基于...
可以通过VB6创建新的项目,添加对ADO的引用,然后使用XMLDSO来加载和操作XML数据,将其绑定到ADO记录集以便进一步处理。 总之,XML的空白字符处理、XML声明、打印可读XML、名称空间的使用以及在VB中利用XMLDSO与XML...
对于XML的支持,ADO.NET允许通过XML加载和保存数据集内容,利用DiffGrams进行差异比较,通过XmlDataDocument进行数据集和XML文档的同步,以及使用XPath和XSLT进行查询和转换。XML也被广泛用于在Web服务中传递数据,...
5. XSLT转换:XSL(Extensible Stylesheet Language)用于转换XML数据。VBA可以调用XSLT处理器,应用样式表到XML文档上,生成新的XML或HTML输出。 6. XML Schema验证:MSXML库支持XML Schema,可以用来验证XML文档...
此外,DataSet可以利用XML操作来处理数据,例如使用XSLT进行数据转换或使用XPath查询数据。DataSet的使用场景包括但不限于:需要对记录集合进行缓存以提升性能,对每条记录需要进行大量处理,或需要使用XML操作对...
5. ADO中的独立对象类包括Connection(连接对象)、Command(命令对象)、Recordset(记录集对象)、Field(字段对象)等。 【程序题】题目要求编写JavaScript函数和XML文档的DTD验证,具体实现未给出,但这是测试...
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 动态...
5. **数据库访问**:讲解如何使用ADO(ActiveX Data Objects)连接和操作数据库,包括SQL查询、记录集、事务处理等内容。 6. **错误处理和调试**:介绍ASP的错误处理机制,如何设置On Error语句进行错误捕获,以及...
7. **XML处理**:XML在数据交换和配置文件中广泛应用,实例可能展示如何读写XML文件、XPath查询、XSLT转换等,帮助开发者理解XML的相关技术。 8. **错误处理与调试**:实例还会包含异常处理机制(try-catch-finally...
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 局部页面...
5. ADO中的独立对象类包括Connection(连接对象)、Command(命令对象)、Recordset(记录集对象)、Error(错误对象)等。 【程序题略】 由于篇幅限制,这里仅提供问题的大致思路: 1. JavaScript函数isAlpha()应...
此外,XML与XSLT(转换语言)和XPath(导航语言)的关系也会被提及。 PHP是一种服务器端脚本语言,常用于动态网站开发。手册会涉及变量、数组、流程控制、函数、类和对象,以及PHP如何与MySQL等数据库交互。此外,...
实例源码可以展示如何读取、写入和操作XML文档,以及利用XPath和XSLT进行数据转换。 七、Web服务和WCF VS2005引入了对Web服务的支持,C#可以方便地创建和消费SOAP或RESTful Web服务。此外,Windows Communication ...
- **ADORecordset与DataSet的区别**:ADORecordset是ADO中用来表示记录集的对象,而DataSet则是ADO.NET中用于表示记录集的对象。两者的主要区别在于DataSet提供了更丰富的数据处理功能,如内置的数据关系管理、数据...
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 ...