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

转载 2006年06月03日 19:57:00
利用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

  • 2008年10月22日 16:22
  • 12KB
  • 下载

XSLT实现XML文档转换成HTML文档

XML文档描述了数据的结构,并且可以用自定义的标记元素描述数据意义,而且实现了记录数据的功能。如果想要将XML的数据显示在网页页面上,如何做呢? 最简单的方式就是将XML文件直接用浏览器打开...
  • xqf309
  • xqf309
  • 2012年10月22日 20:42
  • 9353

纯数据xml通过xslt转换成报表xml

一、 除了要知道xml,xslt的知识,还需要了解ExcelXml(可用Excel打开的报表xml)各标签的含义。 数据放在标签的标签内。 每一行数据放在标签内,每个单元格的内容放在标签内 每...

ADO记录集相关知识

1.打开记录集 首先要创建一个Connection对象实例,然后执行Open方法打开记录集。例如: m_strConnection = _T("Provider=Microsoft.Jet.OLE...

VC ado调用oracle执行存储过程获取记录集

最近在做一个项目,数据库是用SQL Server,不过最近突然来了个需求说要改用Oracle。之前对SQL Server ado访问层做了一些封装,想试试看能不能简单修改后兼容oracle。测试过程中...
  • imlmy
  • imlmy
  • 2013年05月07日 14:33
  • 2377

JAVA利用XSLT进行格式转换,XML转成自己需要的XML、HTML等。

JAVA利用XSLT进行格式转换,XML转成自己需要的XML、HTML等。

xslt转换成html后没有html标签

用xalan转化时的问题: 这是网上的示例代码: String xsltPath="C:\\XTX.xsl"; String xmlPath="C:\\76552.xml"; String htmlP...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用XSLT把ADO记录集转换成XML(3)[转载]
举报原因:
原因补充:

(最多只允许输入30个字)