首页 > 范文大全 > 正文

基于ADO.NET和XSLT的数据转换技术

开篇:润墨网以专业的文秘视角,为您筛选了一篇基于ADO.NET和XSLT的数据转换技术范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

(湖北国土资源职业学院,湖北荆州434002)

摘 要:利用XML文档可以实现异构数据库之间的数据交换。各个应用系统只需将数据转换为符合行业规定的XML文档格式,就可以相互识别交换的数据。文章介绍了在.NET框架下如何利用ADO.NET和xslt技术将关系型数据转换为规定格式的XML文档。

关键词:XML:关系数据库;ADO.NET;XSLT;.NET框架

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2007)01-10026-03

1 引言

XML文档可以表示结构化数据,XML的一个主要目的是允许在组织和应用程序之间自由交换结构化的数据。为此,只要在行业里定义用于交换信息的XML文档格式,各个应用系统之间就可以通过XML文档进行数据交换,应用系统将数据转换为行业规定格式的XML文档,其它系统可识别该文档,并从中获取数据.从而实现系统之间的数据交换。现有的应用系统大多是建立在关系型数据库上的应用软件。本文介绍在,NET框架下如何利用ADO.NET和XSLT技术将关系型数据库中的数据转换为规定格式的XML文档。

2 数据转换流程

将关系型数据库的数据转换为规定格式的XML文档的流程如图1所示,首先利用ADO.NET技术从数据库中获取必须的数据,并将该数据以某种形式的XML文档保存起来。然后利用XSLT技术将XML文档转换为规定格式的XML文档。

3 实现技术

3.1利用ADO.NET从数据库或表中读取数据

ADO.NET是由类、接口、枚举和其他工具所组成的库。这些工具为数据访问提供了结构化的、功能强大的、高效的工具包。ADO.NET有两个核心的组件:DataSet和.NET数据提供者。图2阐明了ADO.NET的基本体系结构、它的两个核心组件和它支持的一些组件。NET Data Provider和OLE DB.NET Data Provider,另外Microsoft还开发了数据提供者Oracle.NET Data Provider和ODBC.NETData Provider.我们可以利用这些.NET数据提供者连接到各种类型的关系数据库,并通过Command对象执行数据库命令来获取数据,然后通过DataReader对象遍历记录。或通过DataAdapter对象读取数据,并将数据存放于数据集中。最后我们可将获得的数据以某种形式的XML文档保存起来。

下面我们通过一个实例来介绍如何利用ADO.NET实现数据的读取并将其存储为XML文档,并给出用C#实现的算法。例如,现有某管理系统,数据库采用SQL SERVER 2000,其数据库结构如图3所示,该数据库系统采用SQL SERVER 2000,我们通过SQL Server,NET Data Provider从数据库中读取班级信息数据并将其存放到一个DataSet对象中。对于其它类型的数据库可选择相应的.NET数据提供者,然后用类似的方法实现类似的功能,在实例中我们把讨论建立在SQL Server.NET Data Provider之上。

.NET Framework中,与SQLServer.NET Data Provider和DataSet相关的类集中在System.Data.SqlClient和System.Data命名空间中,所以必须在程序开头用using把这两个命名空间包含进来。然后,按下列步骤实现数据的读取并将数据保存为XML文档:

步骤1:建立一个Connection对象,连接到数据库。

下面一段代码创建一个Sql-Connection对象,并通过连接字符串指定其连接的数据库和身份验证信息。

//连接字符串connectionString,指定连接的数据库及身份验证信息

string connectionString=”server=localhost;database=xsgl;UserID=sa;password=”;

//实例化一个SqlConnection对象

SqlConnection cn=new SqlConnection(connectionString);

步骤2:创建一个SELECT命令以提取数据,并把它关联到Connection上。

下面一段代码创建了一个SqlCommand对象,将查询班级信息的命令文本赋给它的CommandText属性,指明将执行的SOL命令,同时设置其Connection属性指定执行命令时采用的数据连接。

SqlCommand cmd=new SqlCommandο;

cmd.CommandText="SELECT bjxx.Refld,xxibXX.Refld AS学校Refld,专业Refld,班号,班级名称,专业号,建班年月,学制,班主任职工号班长学号”+

“FROM bjxx INNER JOIN zyjbqk ON bjxx.专业Refld=zvjIJqk.Refld CROSS JOIN xxjbxx”;

cmd.Connection=cn;

步骤3:创建一个DataAdapter对象,并将它关联到SELECT命令上。

下面一段代码首先创建了一个SqlDataAdapter对象.设置其SetectCommand属性为步骤2中创建的SqlCommand对象,指定数据适配器用来填充数据集的Command对象。

SqlDataAdapter da=new SqlDataAdapterο;

da.SelectCommand=cmd;

步骤4:调用DataAdapter的Fill方法。将数据填充到DataSet对象中,然后保存为XML文档。

下面一段代码创建一个用来存放数据的DataSet对象.然后调用DataAdapter的Fill方法,执行数据适配器关联的SEIZCT命令,将数据填充到DataSet对象中。最后调用DataSet的WriteXml方法将数据集中的数据写到XML文档中。

DataSet ds=new DataSetο;

da.Fill(ds);

ds.WriteXml(“c:\\hxx.xml”);

通过上述过程完成从数据库中读取班级信息并保存为XML文档。

3.2利用XSLT技术进行文档格式转换

通过前面的方法获取的数据可能不符合行业规定的XML文档格式,必须通过适当转换使之成为规范文档。例如,我们需要将上面得到的XML文档转换为如下格式,系统之间才能互相识别交换的数据:

92C945BC3AD6”

学校Refld=“B7780E65-7444-476E-8164-0123351330AD”

专业Refld=“93271534-A587-46C5-AE91-0447C3442811”班号=“0806130301”>

高网0301班

080613

200309

3.O

那么,如何将XML文档从一种格式转换为另一种格式?我们可以DOM技术将XML文档加载到XmlDocument对象中,遍历每个节点,以编程的方式生成上述文档。这是可行的,但如果需要修改这种转换是比较困难的,而且每次修改后都要重新编译代码。

首选的方法是使用XSLT样式表。因为XSLT语言是专门为此目的设计的。其次,我们可以很容易地找到某种转换的模板规则,并添加、更新或删除某些部分,创建新的转换。最后,不必重新编译和重新部署用来引用已修改的XSLT样式表的代码。

(1)XSLT样式表 可扩展的样式表转换语言(XSLT)是一种声明性的、基于规则的编程语言,它最初起源于早期的可扩展的样式表语言(XSL)。XSLT是一种由W3C开发的的用于转换XML文档的语言,指导XSLT处理器如何把XML源文中的信息转换为我们喜欢的格式,如XML文档、HTML文档或纯文本。

XSLT样式表是一种XML文档。指定样式表行为的所有规则都包含在属于XSLT命名空间的XML元素中。样式表的文档元素或根元素是,包含version属性,当前为“1.0”,XSLT的命名空间是http://www.w3.org,1999/XSIdTransform。

XSLT转换的结果可以是XML、HTML、纯文本或限定的名称。在默认情况下,输出是HTML。把一个元素声明为元素的一个子元素,并设置相应的method特性.就可以指定其他输出类型。我们把该属性设置为xml.指定XML为输出类型。

在XSLT样式表中,通过模板规则元素描述了XLST处理器如何转换XML文档中满足某种条件的节点。声明模板规则时.要创建一个顶级元素,指定哪些节点包含规则。以在其match特性中使用适当的XPath表达式。XPath是检索XML文档中数据的一种标准语言,于标识、选择或处理节点。在XSLT样式表中,最好为源文档的根节点声明一个模板规则。如果没有该规则,一些XSLT处理器就会失败。

在模板中,可以把匹配XPath表达式的每个节点作为环境节点来访问。为了获得源XML中的值,可以使用元素。它有一个必备的select特性,该特性包含另一个XPath表达式.该特性的值是我们所选的节点。

通过元素来应用为其它节点建立的模板.XSLT处理器根据元素来转换其他模板中的节点.其select特性包含的XPath表达式用来指定源XML文档中的那些节点应由这里匹配的模板来处理。

例如,我们可用下面的XSLT样式表完成上面提出的XM[。数据格式的转换(保存为文件c:\transform-bixx.xslt):

(2)把XSLT样式表应用于XML文档实现转换

把XSLT样式表应用于XML文档有两种方式。第一种方式是静态的,通过在XML文档中引用样式表来实现,第二种方式是动态的,可以通过编程方式来实现。

静态地应用样式表

要把XSLT样式表静态地应用于XML文档,应在源XML的开头加上处理指令。例如,如果bixx.xml和transform-bixx.xsh文件在同一个目录中,就可以在bjxx.xml的开头处添加下面的语句:

type特性指定它要应用的是一个XSLT样式表。href特性指定样式表的位置。

如果要在IE浏览器中查看转换结果,首先可从下列网址htto://wwwanicrosoft.com/downloads/details.aspx?Familyld=D23C1D2C-1571-4D61-BDA8-ADF9F6849DF9处下载一个插件iexmltls.exe.安装该插件之后,通过IE浏览器打开bixx.xml后,在浏览器的右键菜单中选择“View XSL Output”即可查看到转换结果。

静态地应用样式表一般用于将XML文档数据转换为HTML格式文档直接由浏览器显示输出,如果要将XML文档转换为另一格式的文档,往往采用动态方式。

动态地应用样式表

可以利用.NET下System.Xml.XPath、System.Xml.Xsl和Sys-tem.Xml命名空间中XpathDocument类、XslTransform类和Xml-TextWriter类来动态地应用样式表。例如,通过下面一段代码可实现上述bixx.xml文档到规定格式XML文档的转换:

XPathDocument xpathdocument=new XPathDocument (@“c:/bjxx.xml”);

XslTransform xslt=new XslTransformf();

xsh.Load(@“c:\transform-bixx.xsh”);

XmlTextWriter writer=new XmlTextWriter(@“c:\emifbjxx.xml”,null);

writer.Formatting=Formatting.Indented;

xsh.Transformfxpathdocument,null,writer);

writer.Closeο; 首先,把源XML加载到一个XpathDocument对象中,这个对象类似于XmlDocument,但它为XSLT处理进行了优化。接着,把transform-bjxx.xslt样式表加载到一个XslTransform对象中。为了检验转换结果,创建了一个XmlTextWriter对象,利用它将结果写到磁盘。XslTransform执行,NET XSLT处理引擎,在调用其Transform方法时,就调用该处理引擎。这里,我们使用重载的Transform方法,它带3个参数:源XML,样式表的参数(因为此处不需要参数.所以该参数是null),最后是存放转换结果的位置,我们的结果通过XmlTextWriter对象保存在c:\emifbjxx.xml文件中。运行上述程序可将XML文档转换为指定格式的XML文档。

4 结束语

本文提出了.NET Framework下利用ADO.NET和XSLT技术将关系型数据转换为规定格式的XML文档的方法。利用这种方法,应用系统可方便地将数据转换为行业规定的XML文档格式。在此基础上,其它应用系统可利用DOM技术从该规范的XML文档中获取数据,从而实现异构数据库之间的数据交换。

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。