Flash处理XML文档数据教程

2024-04-30

Flash处理XML文档数据教程(通用8篇)

篇1:Flash处理XML文档数据教程

xml|教程|数据

准备:首先你得有台电脑,其次是要装上Windows系统和Flash8,

XML基础:

既然是处理XML文档,就要先来了解下XML文档。下面是我所了解的,有些是在Flash中用不到的。

XML扩展标记语言(Extensible Markup Language)是SGML(Structured Generalized Markup Language)的子集,由World Wide Web Consortium(W3C)的XML工作组定义。

下面开始了解XML的结构。XML是由序言和文档元素组成的。

序言包括:

1.声明(declaration):文档的第一行,它说明这是一个XML文档。 [可选]

2.注释:增强文档的可读性。 [可选]

3.文档类型声明 (document type declaration):XML文档类型定义必须在XML声明之后,文档元素之前,中间可以插入XML处理指令,它说明文档的类型和结构。[可选]

4.处理指令(processing instruction):在XML声明之后,处理XML信息的指令。 [可选]

注:文档类型声明(document type declaration)需要用到xml词汇表。如果想了解详细信息请访问www.w3c.org.

文档元素:

元素说明了文档的逻辑结构,元素包函起始标签、元素内容、元素属性和结束标签。一个xml文档必须有一个顶层元素,所有的元素都嵌套在这个顶层元素中。文档元素名、属性名全部都是自定义的。

说明:

先看代码:

<元素>

<子元素 属性=“子元素”>信息

上面是一个加了文档类型声明,处理指令的简单xml文档。下面一一解释。

这句是xml 的声明信息。version 是版本号,encoding 是字符编码,如果有中文就需要用gb2312 编码,standalone 属性可以取yes和no,属性值yes,说明文档没有外部声明。属性值no,说明文档有外部声明。

这句是xml的注释。

这句是文档类型声明,DOCTYPE标记是声明类型用的,ChooseFlash是类型,这里的类型是指xml中的词汇表。

这句是处理指令,xml-stylesheet是一个处理指令,type是类型,href是地址。这个处理指令把CSS链接到XML文档,跟html中应用css差不多一样。

<元素>

<子元素 属性=“子元素”>信息

这是文档元素(Flash用节点表示)。<元素>是顶层元素,<子元素>是嵌套在顶层元素中的元素,“属性”是一个属性,“信息”是字符串,也可以这样写:

<子元素 信息=“信息” 属性=“子元素”>

如果用了文档类型声明,顶层元素命名最好跟声明的类型一至。否则会出错(要有词汇表时,像这个ChooseFlash这不会出错,因为没有这个词汇表。)

下面是一个完整xml文档:

childNode

xml方面就到这里,下面就是怎么在Flash中调用XML文档和处理XML中的数据。

Flash方面::

在Flash中调用xml文档需要用到XML类和XMLNode类中的一些方法和属性。这里我们就不需要用到那么多。把用到的方法和属性列出来:

XML类:

XML.ignoreWhite;//处理xml文档中的空白,设为true时,忽略空白,默认值为false.

XML.load(“xml文档的地址”);//加载指定的xml文档.

XML.onLoad=function(success:Boolean){};//成功加载了xml文档时调用.

XML构造函数.

XMLNode类:

XMLNode.attributes;//用来指定xml文档的属性.

XMLNode.childNodes;//返回指定xml文档对象的子级的数组.

XMLNode.firstChild;//引用父级节点的子级列表中的第一个子级.

XMLNode.nodeValue;//返回XML对象的节点值.

XMLNode.nodeName;//XML 对象的节点名称

开始实验:

首先说明:在xml声明处加上encoding=“gb2312”,使用gb2312编码;Flash中如果有中文需要在加载代码前面加上System.useCodepage = true;使用系统编码,防止乱码。

实验1:

一个简单的实验,把xml文档中的节点在Flash输出来。新建一个xml文档,在记事本输入下面的代码。保存为 xml-001.xml 。

上面是一个简单的xml文档,结构是一个顶层节点中嵌套三个子级节点。

现在在Flash中如何读出来呢?来看操作:打开Flash,新建一个Flash文档,保存到刚才的xml文档中的目录中,命名 xml-001.fla。在第一帧输入下面代码:

//xml-001.fla.

//实例化一个xml对象.

var myxml:XML = new XML;

//分析时忽略xml文档中的空格.

myxml.ignoreWhite = true;

//加载xml-001.xml文档.

myxml.load(“xml-001.xml”);

//调用XML.onLoad事件.

myxml.onLoad = function(success:Boolean)

{

//如果加载成功,success=true;否则success=false;

if (success) {

trace(“加载成功!”);

//输出顶层节点的节点名和顶层节点中属性name的值.

trace(myxml.firstChild.nodeName+“:”+myxml.firstChild.attributes.name);

//用一个数组来引用顶层节点中子级节点的数组.

var child_arr:Array = myxml.firstChild.childNodes;

//用嵌套for语句遍历出xml文档中的所有数据.

//这个for遍历的是顶层节点下的子级节点.

for (var i = 0; i

//输出顶层节点下的子级节点的节点名和顶层节点下的子级节点中属性name的值.

trace(child_arr[i].nodeName+“:”+child_arr[i].attributes.name);

}

} else {

trace(“加载失败!”);

}

};

实验2:

现在做的是把一个多层嵌套节点的xml文档在Flash中输出来。新建一个xml文档,在记事本中输入下面的代码,然后保存为 xml-002.xml。

上面是一个多层嵌套节点的xml文档,结构是一个顶层节点中,嵌套3个子级节点,3个子级节点分别嵌套3个子级节点。现在又应该怎样在Flash中读出来呢?其实原理跟上面一样,在for中嵌套一个for就可以了。

打开Flash新建一个Flash文档,保存到刚才的xml文档的目录中,命名为 xml-02.fla。在第一帧中输入以下代码:

//xml-002.fla.

//实例化一个xml对象.

var myxml:XML = new XML();

//分析时忽略xml文档中的空格.

myxml.ignoreWhite = true;

//加载xml-002.xml文档.

myxml.load(“xml-002.xml”);

//调用XML.onLoad事件.

myxml.onLoad = function(success:Boolean)

{

//如果加载成功,success=true;否则success=false;

if (success) {

trace(“加载成功!”);

//输出顶层节点的节点名和顶层节点中属性name的值.

trace(myxml.firstChild.nodeName+“:”+myxml.firstChild.attributes.name);

//用一个数组来引用顶层节点中子级节点的数组.

var child_arr:Array = myxml.firstChild.childNodes;

//用嵌套for语句遍历出xml文档中的所有数据.

//这个for遍历的是顶层节点下的子级节点.

for (var i = 0; i

//输出顶层节点下的子级节点的节点名和顶层节点下的子级节点中属性name的值.

trace(child_arr[i].nodeName+“:”+child_arr[i].attributes.name);

//这个for遍历的是顶层节点下的子级节点下的子级节点.

for (var j = 0; j

//输出顶层节点下的子级节点下的子级节点的节点名 和 顶层节点下的子级节点下的子级节点中属性name的值.不要晕.看看输出面板就会明白它们之间的关系了哦.

trace(child_arr[i].childNodes[j].nodeName+“:”+child_arr[i].childNodes[j].attributes.name);

}

}

} else {

trace(“加载失败!”);

}

};

实验3:

利用xml文档数据做用户登录,

新建一个xml文档,在记事本中输入下面的代码,然后保存为 xml-003.xml。

首先分析下结构:

是顶层节点。是顶层节点下的子级节点。Post是manager节点的属性。是顶层节点下的子级节点,Post是Employee节点的属性。

是顶层节点下的子级节点下的子级节点,username和password是UserData节点的属性。

这次也需要用到嵌套for。

打开Flash新建一个Flash文档,大小为300*100,保存到刚才的xml文档的目录中,命名为 xml-03.fla。

新建3个图层分别命名Actions 、cont、bg 。

bg层在第一帧画三个文本框大小的虚线框。cont层在第一帧拉二个输入文本框,实例名分别为username_txt和password_txt,在拉一个动态文本框,实例名为 status_txt。将这三个文本框对齐须虚线框,再点窗口->公用库->按钮,拉一个按钮出来。实例名为login_btn。如图:

Actions层在第一帧中输入以下代码:

//xml-003.fla.

//使用系统编码.防止乱码.

System.useCodepage = true;

//实例化一个xml对象.

var myxml:XML = new XML();

//分析时忽略xml文档中的空格.

myxml.ignoreWhite = true;

//加载xml-002.xml文档.

myxml.load(“xml-003.xml”);

//调用XML.onLoad事件.

myxml.onLoad = function(success:Boolean)

{

//如果加载成功,success=true;否则success=false;

if (success) {

trace(“加载成功!”);

login_btn.onRelease = function()

{

//用一个数组来引用顶层节点中子级节点的数组.

var child_arr:Array = myxml.firstChild.childNodes;

//用UserData指定xml文档节点的attributes对象.

var UserData:Object;

//这个for遍历的是顶层节点下的子级节点.

for (var i = 0; i

//这个for遍历的是顶层节点下的子级节点下的子级节点.

for (var j = 0; j

//用UserData指定child_arr[i].childNodes[j].attributes对象

UserData = child_arr[i].childNodes[j].attributes;

//判断用户名和密码.

//这里的UserData.username其实就是child_arr[i].childNodes[j].attributes.username的简写.UserData.password同理.

//username和password是xml文档节点中的属性.因为xml和Flash区分大小写.所以在输入时要注意大小写.

if ((username_txt.text == UserData.username) && (password_txt.text == UserData.password)) {

//Post这个是顶层节点下子级节点的Post属性.

status_txt.text = child_arr[i].attributes.Post+“:”+UserData.username+“登录成功”;

//如果用户名和密码正确就退出for.这个重要.如果不用这个,就会一直重复判断用户名和密码.直到将xml文档节点遍历完.那样就不是我们想要的.所以一有正确的就退出for;

return;

} else {

status_txt.text = “用户名或密码错误”;

}

}

}

};

} else {

trace(“加载失败!”);

}

};

实例4:

利用List组件做个mp3播放列表。

新建一个xml文档,在记事本中输入下面的代码,然后保存为 xml-004.xml。

阿桑-寂寞在唱歌

寂寞是因为思念谁

老狼-睡在我上铺的兄弟

誓言-求佛

下一站天后

伊能静-你是我的幸福吗

爱情复兴(容祖儿)

水木年华-秋日恋歌

张国荣-倩女幽魂

一首很棒的英文歌(酒吧里常放)

xml结构:

xml文档中的顶层节点。

阿桑-寂寞在唱歌顶层节点下的子级节点,path是mp3节点下的属性,“阿桑-寂寞在唱歌”是mp3的节点值。

打开Flash新建一个Flash文档,大小为200*150,保存到刚才的xml文档的目录中,命名为 xml-04.fla。新建2个图层分别命名Actions、cont ,cont层中拉一个List组件到第一帧.大小为200*150,实例名为mp3_list,Actions层第一帧输入下面代码:

//xml-004.fla.

//使用系统编码.防止乱码.

System.useCodepage = true;

//实例化一个xml对象.

var myxml:XML = new XML();

//分析时忽略xml文档中的空格.

myxml.ignoreWhite = true;

//加载xml-004.xml文档.

myxml.load(“xml-004.xml”);

//调用XML.onLoad事件.

myxml.onLoad = function(success:Boolean)

{

//如果加载成功,success=true;否则success=false;

if (success) {

trace(“加载成功!”);

//用一个数组来引用顶层节点中子级节点的数组.

var child_arr:Array = myxml.firstChild.childNodes;

//这个for遍历的是顶层节点下的子级节点.

for (var i = 0; i

//将歌曲添加到List组件中.

//child_arr[i].firstChild.nodeValue这个是xml节点的节点值.

//child_arr[i].attributes.path这个是xml节点下的path属性.

mp3_list.addItem({label:(i+1)+“.”+child_arr[i].firstChild.nodeValue, data:child_arr[i].attributes.path});

}

} else {

trace(“加载失败!”);

}

};

//listEvent函数是执行List组件中change事件

function listEvent():Void

{

//这个就是歌曲地址.用Sound类的loadSound方法就可以播放歌曲了.例:mysound.loadSound(mp3_list.selectedItem.data);详细请看帮助文档.

trace(mp3_list.selectedItem.data);

}

//添加帧听器.

mp3_list.addEventListener(“change”, listEvent);

篇2:Flash处理XML文档数据教程

Action应用:Flash AS与XML数据交互

AS3里使用E4X(ECMAScript. for XML)来规范定义组用于处理XML数据的类和功能。E4X类的方法、属性和运算符实现以下便利:

·简单:在可能的情况下,使用E4X可以更容易地编写和理解用于处理XML数据的代码。

·一致:E4X背后的方法和推理在内部是一致的,并与ActionScript的其它部分保持一致。

·熟悉:使用众所周知的运算符来处理XML数据,如点(.)运算符。

篇3:Flash处理XML文档数据教程

XML(Extensible Markup Language,可扩展标记语言)是W3C(World Wide Web Consortium)为适应Internet的发展,实现快速的电子商务和电子数据交换而推出的新型Web语言,被看作是企业间交换数据的最佳格式。它通过文档类型定义或模式,使数据交换独立于各企业的数据库模式。

解析XML是XML应用中的关键一环。目前已经有多种语言XML解析器(Parser)和编程语言接口库(API),包括JAVA、C++和Perl等,他们都遵循SAX(Simple API for XML)和DOM(Document Object Model)标准。其中,SAX要比DOM复杂,它要求跟踪SAX正在处理地内容信息,以便知道解析器处于文档中地那个部分,DOM模型使用则相对简单。开发人员通过API可以高效地创建、遍历和删改X M L文档[1]。

本文采用TXML Document组件对集装箱码头的XML数据进行解析,详细介绍了TXMLDocument的使用方法以及Delphi环境下XML数据解析的步骤。

2 XML数据解析任务

本文所设计的集装箱码头采用美国Navis公司提供的集装箱码头管理和控制软件Express。Express是一个管理和维持码头业务处理、数据处理并对各种码头操作和服务进行准确记录和计价的综合信息服务系统,该系统应用Oracle关系数据库管理系统建立。

Navis Express提供了一个PL/SQL数据包访问函数(XP_MSG.POST),采用主从问答式进行数据交换。通过提供不同的XML格式的参数实现对数据的访问,同时返回的也是XML格式的数据。

如图1所示是查询一拖车信息的命令(XML格式),在此命令中,只需要一个输入参数拖车号TRUCKID。

其返回的数据格式如图2所示,显示了该拖车上所有集装箱的各种信息,包括集装箱类型、尺寸、重量、号码等所有信息。

我们现在需要做的即是将所需要的集装箱数据从X M L文档中解析出来,以便供其他系统使用。

3 用TXMLDocument组件进行XML数据解析

X M L文档的构成单元是标签元素。每个标签元素由起始标签名、元素内容、结束标签名三部分组成,起始标签名和技术标签名必须相同,元素内容也可以是嵌套或并列的标签元素,最外层的标签只有一个。无论文本内容有多长或多么复杂,XML元素中都可以再嵌套别的元素,这样使相关信息构成树状结构。在上述的X M L文档中,是最外层的标签元素,它包含了两个标签元素,表明返回的结果,表明返回的状态,各集装箱的信息在每个中。

TXMLDocument组件是使用Microsoft XML DOM模型来处理X M L的,MSXMLDOM是基于COM的,Borland公司将其封装在VCL内部,提供一系列的易于使用的函数和接口操作XML文档。

DOM采用的是一种树型结构[2,3],如图3所示。

通常情况下,解析XML数据需要如下几个步骤[4,5]:

(1)建立XML文档对象。

在Delphi环境下,可以使用TXMLDocument或I X M L D o c u m e n t接口来生成文档对象,并用需解析的X M L数据赋值。

(2)获取节点。

TXMLDocument文档对象在内存建立后,就可以通过遍历树状结构,获得每一个节点及该节点包含的子节点的信息。

上例中,获取第一个集装箱节点的语句如下:

(3)获取节点中的相关信息。

确定节点后,我们就可以获取该节点的属性名、各元素的值等等。

以上述集装箱数据为例,获取方法如下:

(4)还可以进行添加子节点、删除节点、修改节点信息等操作。

详细的使用说明我们可以参考Delphi联机帮助中有关XMLDocument和XMLNode的相关内容。

4 结束语

本文利用Delphi封装好的TXMLDocument组件实现了对集装箱码头X M L数据的解析,解析结果如图4所示。

由于XML文档的树型结构能很好的描述客观世界对象的层次模型,易于理解,XML作为一种内容建模和数据交换标准得到了广泛认同,得到了MS SQL Server2000,ORACLE等大型数据库厂商的支持,而且它作为一个开放标准,独立于机器平台、提供商及编程语言,利于实现系统集成。本文介绍的解析方式简单实用、执行高效,值得推广。

摘要:随着Internet的快速发展,XML已经成为企业数据交换的最佳格式。本文采用TXMLDocument组件(使用MS DOM技术)对XML数据进行解析的方法,详细介绍了在Delphi环境下XML数据解析的步骤。

关键词:文件对象模型(DOM),XML数据,TXMLDocument组件,数据模型

参考文献

[1]MICHAEL MORRISON,et al.XML揭秘-入门应用精通[M].北京:清华大学出版社,2001年

[2]陈锻生.多源XML信息提取器的研究[J].小型微型计算机系统,2004,(25):112-116

[3]李玲,陶启萍.基于DOM技术的XML文档到关系存储的实现[J].标准与技术追踪,2004,(10):44-47

[4]李淑彪.用JDOM解析XML金融交易数据[J].华南金融电脑,2004,(1):92-95

篇4:Flash处理XML文档数据教程

关键词 XML 关系数据库 映射

中图分类号:TP3 文献标识码:A

由于数据库技术本身的发展和数据库市场的变化,使得越来越多的应用需要在异构数据源之间进行访问,XML技术便应运而生。然而,目前大部分应用的数据存储在关系数据库中,XML数据又以XML文档形式存在,因此,研究XML文档与关系数据库的转换对异构数据源之间的数据集成非常重要。

1 XML与关系数据库的比较

由于传统的各数据库管理系统之间的异构性及其所依赖操作系统的异构性,很难实现在异构数据库之间进行通信,同时对关系数据库的访问还依赖于系统对ODBC的支持程度,即便如此,很多防火墙不允许这种信息转换,而且还容易被攻击。XML具有无可比拟的优势,一方面,利用XML文档,开发人员可以编码任何关系数据库中的面向记录的数据,并很好地保持这些数据的逻辑结构,甚至可以根据实际应用的需要更改这些数据的逻辑结构。另一方面,XML文档具有透明性和平台无关性,独立于传输协议,可以使用FTP、HTTP、RPC 等多种方式传输,发送端和接受端无须关心数据是来自于什么平台以及是如何产生的。

但是,XML作为一种形式语言,以文本的形式对数据进行描述,存在管理和检索上的困难,仍然无法完全取代数据库。首先,数据库具有灵活而高效率的数据操作手段,可以处理海量的数据信息。就XML文档而言,目前主要通过XML解析器提供的API来实现对文档数据的访问,但随着XML文档的数据量增大,这种方法的效率明显不如访问数据库的效率高,而且XML文档数据的维护也更加困难。其次,从并发性来说,关系数据库本来就被设计为允许多个用户同时处理信息,但目前对XML文档的访问不具备并发性。最后,从安全性来说,数据库拥有一个很好的安全控制体系,允许用户对数据进行不同级别的处理,而这也是XML文档所不具备的。

2 XML数据的关系存储

XML数据源有XML纯文本文档、关系型数据库以及其他应用数据几类。由于XML数据源的不同,关于XML存储的研究目前大致分为四个方向:利用文件系统存储XML数据的研究;利用面向对象数据库存储XML数据的研究;用关系数据库存储XML 数据的研究;专门设计的XML(NXD) 存储策略。针对于XML具体应用,在存储XML文档的数据库技术上,形成了两大阵营。一种阵营主张在原有的传统关系数据库基础上,通过扩展XML支持模块或中间件,来完成XML数据和数据库之间的格式转换和传输;另一种阵营主张利用NXD技术来解决XML文档的存储管理。用关系数据库来存储XML数据,可以利用现有数据库的存储管理、并发控制、恢复、版本机制等技术有效地管理数据,并使用SQL查询作为数据存取的方法,所以用关系数据库来保存和处理XML数据是很有效的方法。利用关系数据库来存储XML数据的方法是XML半结构数据转换为结构化数据后存储于二维表中,来实现对XML数据的存储和管理。由于XML和关系数据库数据模式的互异性,不能简单地将XML文档存储于关系数据表中,为了实现在XML文件和数据库之间交换数据,必须提供一个XML映射层,将XML文档模式(DTD、XML Schema)映射到关系数据库模式。

3 XML与关系数据库的映射方法

一个具体的XML模式到关系模式的数据转换需要涉及较为复杂的XML格式分析处理及相应的数据库操作和有效性校验。两者之间的映射为双向映射,根据映射关系的建立方式不同,主要存在两种方法:基于模板驱动的映射和基于模型驱动的映射。

(1)基于模板驱动的映射

XML文档包含简单元素和复杂元素两类,简单元素包含的内容是不具层次结构的简单内容,而复杂元素可包含属性、子元素,还可以包含多个子元素,其中子元素还可以是复杂元素。基于模板驱动的转换方法是一种浅层映射,只能用于从其他类型数据到XML文档之间的数据传递,并不支持面向对象之间或者关系与对象之间的信息交互,它无需提前定义好XML文档和其他数据之间的映射,只需在XML文档模板中嵌入一些SQL命令,这些命令在转换时被系统识别和执行,把执行的结果替换到指令的位置,生成最终的XML文档即可。

(2)基于模型驱动的映射

篇5:Flash处理XML文档数据教程

XML[1]是eXtensible Markup Language的缩写,称为可扩展标记语言。1998年2月W3C正式推出了XML(XML1.0)。XML的前身是SGML(Standard Generalized Markup Language,标准通用标记语言)。XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,它可以标记任何一种事物。XML的跨平台型,它提供了一种不同的应用程序之间进行数据库交换的公共标准,是一种公共的交互平台。XML文件是由标记以及它所包含的内容构成的文本文件,这些标记可自由定义,其目的是使得XML文件能够很好地体现数据的结构和含义。W3C推出XML的主要目的是使得Internet网络上的数据相互交流更方便,让文件的内容更加显而易懂。

W3C XML1.0规范给出一种XML通用数据模型。XML文档定义为具有一个名字和根元素。一个XML文档有一棵树组成。一棵XML文档树是一个节点的集合,其中每个节点至少有一个父节点,并可以有多个有序的孩子节点。一个XML文档存在六种类型的节点:

1)声名节点。包括XML声明信息和DTD声明信息。

2)元素节点。每个元素节点有一个名字、一个父节点、一个属性节点集、一个有序的由元素节点、字符数据节点和注释节点组成的孩子集。其中根元素节点没有父元素,而且每个文档只有一个根元素节点,它引用整个XML文档资源。

3)字符数据节点。文档中的字符数据字符串,包括CDATA片段。

4)属性节点。每个属性节点有一个元素父节点、一个属性名和一个属性值。多值属性例如IDREFS,分成多个节点。

5)注释节点。由一个该文注释组成。

6)处理指令节点。由一个目标和数据组成。

下面给出一个XML文档例子。

2 文档对象模型(DOM)

XML解析器是XML和应用程序之间的一个软件组织,为

应用程序从XML文件中解析出所需要的数据,XML解析模型如图1所示。

文档对象模型(Document Object Model,DOM)提供了一种从其他的应用程序中调用或管理XML数据的方法。处理方法是将一个XML文档看作一个对象,通过固定的方法和属性对XML文档的不同标记进行读写。DOM规范的核心就是树模型,对于要解析的XML文档,解析器会把XML文档加载到内存中,在内存中为XML文件建立逻辑形式的树,上面XML文档例子对于的DOM树图2所示。DOM就是XML文档的一个结构化的视图,它将一个XML文档看作是一棵节点树,而其中的每一个节点代表一个可以与其进行交互的对象。树的节点是一个个的对象,通过操作这棵树和这些对象就可以完成对XML文档的操作,为处理文档的所有方面提供了一个完美的概念性框架。通过DOM解析器处理XML文件效率高,但是,十分消耗系统的资源,比较适合复杂但相对较小的文件。DOM解析器解析XML文件需要下列几个步骤:

1)建立一个DOM解析工厂;

2)通过解析工厂创建DOM解析器;

3)解析指定的XML文件;

4)根据标记名称获得node标记列表;

5)遍历每一个node节点;

6)获得标记内容。

3 XML文档到关系数据库的数据转换

XML文件和关系数据库有很多相似之处,关系数据库采用二维表方式存储数据,XML文件通过标记之间的关系来描述数据。关系数据库提供了对于大批量数据的有效存储管理和快速信息检索、查询的功能。XML文件是基于标记的文本文件,兼容性好,便于组织、解析和交换数据。某个系统获得一个XML文件后,可能需要将XML中的某些标记包含的文本内容转化为数据库中表的一条记录,以便发挥关系数据库在管理数据方面的优势;另一方面,一个应用系统可能需要将关系数据库表中的某些记录转化为一个XML文件,以便与其他系统交互数据,发挥XML文件在数据交换上的优势。

要把XML文件中数据写入关系数据库中,首先需要利用解析器解析出XML文件中的数据,再利用某种技术获得数据库的连接,把数据写进数据库。Sun公司制定了JAXP(Java API for XML Processing)规范,用于在Java程序中以一种标准的方式对XML文档进行处理。将XML中的某些标记中的内容转化为数据库中表的一条记录,主要步骤如下[5,6]:

1)使用DOM解析器获取标记中的数据;

2)连接数据库,将获取的文本数据作为一条记录添加到数据库。

下面给出使用Java语言开发的基于DOM的XML文档到SQL Server2000数据库的数据转换的实例,实现把上面XML文档例子的数据写入SQL Server2000数据库中books表中,主要代码如下。

运行上面的程序将前面的XML文档例子中的数据转换到SQL Server2000数据库中,books表中的数据如图3所示。

4 结束语

关系数据库系统相当成熟,把XML文档数据转换到关系数据库中,可以发挥关系数据库在管理数据方面的优势.本文介绍的利用Java语言实现基于DOM的XML文档到SQL Server2000数据库的数据转换方法,经实例验证是正确可行的。利用Java语言与DOM相结合来解析XML文档,需要把XML文档全部加载到内存中。如果XML文档非常庞大,以及解析器耗尽内存,就会造成内存溢出异常。

摘要:随着Internet的普及和Web技术的快速发展,XML正迅速成为事实上的数据表示和交换标准,大量XML数据的涌现出来,为了实现XML数据的快速查询和有效的数据交换,需要将XML文档数据转存到关系数据库中。该文介绍了基于DOM的XML文档到关系数据库的数据转换方法。

关键词:XML,DOM,关系数据库,转换

参考文献

[1]W3C.Extensible Markup Language(XML)1.0(Fifth Edition)[EB/OL].http://www.w3.org/TR/2008/REC-xml-20081126/.

[2]朱珊娜,李书琴,安福定.XML文档到关系数据库的转换研究[J].计算机工程与设计,2008,29(21):5507-5509.

[3]林耀进.基于ADO.NET实现XML文档与关系数据库转换的方法[J].计算机与现代化,2007(6):43-45.

[4]蔚晓娟,冉静,李爱华,等.基于DOM的XML解析与应用[J].计算机技术与发展,2207,17(4):86-88.

[5]范立锋.XML实用教程[M].北京:人民邮电出版社,2009.

篇6:Flash处理XML文档数据教程

关键词:可扩展标记语言;关系型数据库;XML查询语言

Simple Analysis on Transformation Between XML Documents and Relational Databases

Tang Ye

(Zunyi Normal College,Computer Science Department,Zunyi563002,China)

Abstract:Due to the popularity of relational databases,we study the bi-way transformation between the XML documents and relational databases. Furthermore,discuss the way of transforming XML query expression into SQL query.

Keywords:XML;Relational Databases;XML-QL

一、XML与数据库的异同

XML使用XML文档提供数据存储,采用DTD或XML Schema来描述数据的逻辑结构,用XQL、XML-QL、QUILT等查询语言作为直接操作XML文档中数据的工具,能够对数据进行直接存取访问,采用SAX(Simple API for XML)和DOM提供了应用程序的编程接口。这样在数据量一般、用户较少、性能要求不高的环境下可以把XML当作数据库来使用。用XML存储数据的优势在于它的开放性好,XML独立于厂商可以跨平台运行,允许不同来源的数据无缝集成,从数据描述的角度看,XML灵活、可扩展,结构与显示是分离的,并且可以直接支持Web应用。

不过,XML还缺少很多在真实的数据库中所必备的内容。在要求有多用户使用、需要严格的数据完整性并且对性能有很高的要求的情况下,数据库的优势就很明显了。DBMS具有分阶段事务提交、加锁等自动的并发访问机制,它的索引功能可以极大地提高数据查询的速度,有灵活和安全的用户权限管理功能,并且在数据完备性、多用户访问、触发、多文档查询等方面有强大的机制。

当然,我们不排除在将来XML文档能够拥有数据库的一切优良特性,甚至数据库本身就是用XML来实现,但在目前的情况下,关系数据库还在商业应用中占主导的地位,在这样的背景下研究XML与数据库之间的相互转化,特别是与关系数据库之间的转换就显得特别重要。

二、转换原理

由于XML是层次结构的,它可以对非关系型的数据进行编码。但是,目前服务器上维护的数据来自关系型数据库,因此我们首先讨论如何使关系型数据和XML结构相配。[1]

关系数据库的基本组成单位是表,这里定义一个映射实现表和XML数据文档之间的转换。假设一个表:TABLE(A1,A2,…,An),其中An表示表格中的第n个字段名,可以用下列算法转变为一个XML文件。

1.将整个表格表示成为

标记块,以后的所有操作内容都放在这两个标记之间。

2.将表格的第一行表示成为标记块,并且在该行中的每一列,以列的字段名作标记名,依次表示为标记组合。

3.对表格中的其他行重复上一步的做法,直到表中最后一行数据。

转换后的结果如下图所示:

X11

X21

… …

Xn1

……

X1m

X2m

… …

Xnm

我们可以建立数据库模式(database schema)和XML数据模式(xml schema)之间的映射关系,实现信息的转化。

从数据库的数据模式到XML数据模式的转化规则是:[2,3]

(1)为每一个表创建一个元素。

(2)为表中的每一个字段创建一个属性或只能是PCDATA(可解析字符串)的子元素,子元素或者属性的类型尽量与表中的字段数据类型一致,若字段在表中允许为空,则该字段对应的属性或者元素也应该允许空。

(3)对每一个主键和外键关联,将外键所在的表创建的元素作为子元素插入主键所在的表所对应的元素中。

从XML数据模式到数据库的数据模式可以用如下的方式建立:

(1)为每一个有子元素或者混合内容的元素建立一个表,该表具有一个关键字。

(2)为每一个混合元素建立一个独立的表,该表通过父元素表中的关键字建立关联。

(3)为每一个元素的单值属性和每一个只能是PCDATA的一次出现的子元素创建一个字段,如果该子元素或者该属性在XML中允许为空,则相应的在数据库中,该字段允许为空,如果属性或者元素不能为空,则该字段不能为空。

(4)为每一个元素的多值的属性或者能在文档中多次出现但类型是PCDATA的子元素创建独立的表,该表与父表通过父表的关键字关联。

这样的转换比较完整地将原来存在于XML文档中的结构映射到了数据库中,接下来的要做的只是将该DTD对应的文档的内容导到数据库中即可,这种导入是非常简单的。

需要注意的是当XML文档不是由数据库中导出,而是由应用程序来指定XML文档的数据结构时,从XML数据模式映射到数据库模式时存在一些问题:首先是映射到表的时候需要将字段的数据类型设定,DTD文档无法准确定义元素的数据类型,在引入schema之后可以解决此问题;[4]其次在XML文档中,大小写是区分的,而在数据库中大小写是不区分的,假如在XML文档中存在两个PCDATA的元素,它们的名称除了大小写不同外都一样,则转换程序会将其转换成两个字段,这会导致在数据库中错误的发生;另外XML数据是有顺序的,而数据库中的数据是无序结构表达的,办法之一是添加一个sort字段。

三、基于SQL的XML的查询的实现

(一)XML查询语言

用户对所感兴趣的数据通常有一个查询产生,而查询中最关键的部分是查询的条件表达式。基于这种观点,SELECT,DELETE,UPDATE等操作的关键都是找到用户感兴趣的数据,并进行相应的操作,利用关系数据库来查询处理XML数据就成为需要解决的问题。[5]

研究者已提出了各种XML查询语言,如Lorel[20],XML-QL,XQL等,一个Lorel查询的例子如下:

SELECT x.author FROM project.publication.x WHERE x.title LIKE Lorel%

首先我们消除Lorel查询中的变量成分,根据Lorel查询的语义,同一正则路径前缀绑定相同的路径实例。一个变量可以用其对应的表达式前缀替换。上例消去变量后表示如下:

SELECT project.publication.author WHERE project.publication.title LIKE Lorel%

XML查询语言的基本特点是正则路径表达式一个正则路径表达式的定义如下:

R=(R1.R2)|(R1|R2)| R*|R+|R?|#|NAME|ε

其中R1.R2表示从R1到R2的路径,R1|R2表示选择关系,R*、R+和R?分别表示R的0或多、1或多、0或1次重复,#表示任意路径,NAME表示结点标记,ε表示空路径。

与正则路径表达式RPE相对应,仅由结点标记构成的路径称为简单路径表达式(SPE),将仅含简单路径表达式的查询成为简单路径查询。

(二)重写RPE查询为SPE查询

重写RPE查询为SPE查询的重点在于消去RPE查询中的正则操作符。

消除查询表达式中出现的#。一般地,正则表达式E1#E2匹配从E1开始,经一条或多条边到达E2的所有路径。消除#需遍历整个映射图,将映射图中以E1为起点,E2为终点的子图转化为与之等价的正则表达式。将一个图转化为正则表达式的问题是一个已知问题,采用适当的算法我们可以将表达式中的#部分转化为与之匹配的映射子图对应的正则表达式,从而消除#。

消除*和+操作符。可以通过在模式层(即DTD图和映射图层)保存数据图中环的路径实例的统计信息来消除 *,类似地也可以消除+操作符。

消除|。若表达式S1|S2|…|Sn出现于查询的SELECT子句中,则算法将其重写为n个查询语句Q1,Q2,…,Qn的并。

消除?。一个表达式P?可以重写为P|ε。

(三)重写SPE查询为SQL查询

给定一个SPE查询,SPE-SQL算法[6]将其中的每个简单路径表达式S1,S2 ,…,Sn与DTD映射图中的路径进行匹配,假定该路径在XML-关系映射下对应K个关系R1,R2 ,…,Rn,这K个关系将S1,S2,…,Sn划分成K段相连路径P1,P2,…,Pn,其中路径段Pi(0

SELECT project.publication.author

遍历映射图,查询被重写为如下的SQL语句:

SELECT author

FROM project,publication

WHERE project.Nid=publication.Pid and publication.Nid=author.Pid

将XML查询转换为关系系统中的查询过程为:首先将XML查询中的变量消去,把正则路径表达式重写为简单路径表达式,再将SPE表达式的查询转化为SQL查询。

参考文献:

[1]Ronald B,XML and Databases,http://www.rpbourret.com/xmldbms

[2]Goldman R,McHugh J,Widom J,From Semistructured data to XML,Proc of the 2nd Workshop on Web and Databases,1999,2:25-30

[3]张素智,卢正鼎,李春林.XML数据库及其应用研究计算机工程与应用,2002,l,8:32-35

[4]Widom J,Data Management for XML: Research Directions,http://www-db.stanford.edu/widom

[5]刘芳珠,潘亦,潘金贵.基于3层网络架构及DOM的XML系统模型,小型微型计算机系统,2001,l,12:1512-1515

[6]Mary F,Wang C,Dan S,Silkroute-trading between relation and XML,Computer Networks,2000,33:723-745

作者简介:

唐晔(1973-),男,讲师,主要从事计算机网络方向的研究。

篇7:Flash处理XML文档数据教程

XML(eXtensible Markup Language)即可扩展标记语言,是由W 3C(world Wide Web Consortium)于1998年2月发布的一种标准。XML描述的是数据本身的意义和数据实体之间的复杂嵌套关系,这使得XML既能表示结构化的数据,如关系和对象数据,又能够表示半结构化的数据,如Web数据。XML现已经逐渐成为Internet上数据表示和交换的新的标准。

1 什么是XML

XML既是可扩展的(eXtensible)一种元标记语言,又是一种可定义自己的新的标记语言,标记是核心,功能更加的强大,同时还规定了它特有的一套标签。XML在很多方面更具有优势,比如开发灵活的Web应用软件,更有意义的搜索,当然XML也有一点缺陷就是能充分支持XML的应用处理程序不多。

XML的出现有它的必然性,可以弥补HTML语言语义性差、格式固定、难以扩展、交互性差、内部结构的条理性差、单向的超链接等等方面的一些不足之处。

2 XML与关系数据库

XML文档属于半结构化的数据,而关系数据库管理系统(RDBMS)采用二维表作为存储数据的模型,表格由行和列组成,列用于表示组成数据有效信息的属性,行则是用于指示一条完整的数据记录。XML文档与结构化的关系数据库进行转换时,关键问题是如何将XML文档的结构与关系数据库数据的结构即关系表对应起来,也就是需要建立不同结构层次之间的映射关系。

3 XML的一般存储模式

3.1 以文本文件保存XML数据

可以将一个XML文档存储成一个文本文件,并且实现一个查询引擎,当查询被执行的时候,XML文件被解析成驻留在内存的一棵树。只要查询计算还需要树中的结点,这棵树就必须驻留在内存里。

3.2 基于关系数据库系统的存储方法

目前提出的XML-RDB存储方法主要3类:

(1)将XML文档作为一个整体存储在数据库的某一列中,它的基本存储单元是XML文档。

(2)将XMI文档看成一种图结构,进行一定的分解,然后将其元素和值存储在关系数据库中。

(3)采用一定的映射规则,直接将XML文档模式(或从XML文档中抽取出模式信息)映射到相应的关系模式,然后再根据映射模式存储相应的XML文档。这种方法能够利用关系数据库的特性,如查询优化和并发性控制等。

XML关系存储的核心是XML文档到RDB的模式映射方法,包括模型映射和结构映射。一个XML文档实例可用类似对象交换模型的变种来表示。每个节点表示个对象(XML元素)并赋予一个唯一标识,节点的每一条边表示相应对象的一个属性并用属性名(XML子元素/属性名)标注,叶子节点有相应的原子数据值(XML子元素内容/属性值)。如果XML文档实例中有且考虑元素间的引用,则它是一个图模型,否则是一个树模型;如果考虑XML元素次序,则成为一种有序模型。

3.3 对象管理器方法

在对象管理里存储XML文档就是把每一个XML元素存储成一个独立的对象。但是,由于XML元素通常都非常小,因此这种方法的空间开销很高。取而代之,把XML文档的所有元素存储在一个单独的对象里,而XML元素本身就变成了这个对象里的轻量级对象。

3.4 XML存储效率分析

(1)使用文件系统来存储XML文档的优点是简单易用,而且也适合于XML文档内容少、数量小的场合,但其局限性也是显而易见的,当要存储某所大学所有系的学生的信息时,无论是数据传输还是数据维护都变得难于操作。与数据库不同的是,文件系统不能提供并发性控制。对于文件系统,其安全控制的基本单位是一个文件,无法对文件的一个部分来规定访问控制权限。

(2)作为完全结构化的模型,关系型数据库仍然不太擅长于层次化的数据。使用纯关系型数据库存储XML文件,查询起来会很不方便。

(3)面向对象方法按照和原始XML文本文件一样的顺序(深度优先),将元素簇集存储。在面向对象数据库基础上实现XML数据的存储和查询,而面向对象数据库在查询优化上存在的问题制约了XML数据的查询分解和优化。

4 XML数据的查询

现已提出多种查询语言,如XPath、XQuery、XML2QL等,这些语言均是通过路径表达式实现对XML文档的查询。按照查询处理方式,这些优化方法基本上可以分四类:

(1)图的遍历方法。把XML文档看成图,对给定的查询,通过对XML文档图进行遍历来实现查找过程。按照遍历方式不同分为自顶向下遍历、自底向上遍历和混合遍历三种。该类方法搜索空间较大,查询的时间开销和空间开销均较大。

(2)路径连接方法。针对图的遍历方法搜索空间较大的问题,为了减小搜索空间,通过对XML文档中的节点进行编码,根据编码判断节点之间的父子关系和祖先/后代关系。查询时将查询路径分解成一系列简单路径,通过节点间的包含/拥有关系连接来求满足所求关系的节点集合,然后将多条简单路径的查询结果连接起来。这种方法虽然不需要对整个搜索空间进行遍历,但对于长度为n的路径,需要进行n-1次连接操作,系统开销较大。

(3)路径索引方法。对于没有模式信息的XML文档,根据文档内容提取模式信息,建立路径索引,查询时利用路径索引来减小搜索空间。DataGuides就是路径索引的典型代表,该方法对于文档内容变化不大的情况是高效的,当文档内容经常发生变化时,需要动态重新提取模式信息,模式信息的维护代价较大。另一方面,DataGuides中的合法路径必须是从根开始的,这样不便于进行任意路径的查询。

(4)基于XML模式的方法。可以利用DTD优化XML查询,这种方法是利用DTD中对XML结构的定义建立DTD中的节点与XML文档中节点的对应关系:先在DTD中查找节点,根据与文档中节点的对应关系进一步查找。该方法可大大减小搜索空间,但现有的基于DTD的方法均没有考虑DTD中带有环这一复杂情况,应用领域受到一定限制。

XQuery语言是一种巧妙地使用XML结构的查询语言,可以跨各种数据表示查询,而不管这些数据是物理存储在XML中,还是通过中间件被视为XML。它使查询简洁易懂,而又相当灵活,可以查询大范围的XML信息源,其中包括数据库和文档。XML数据类型提供了四个检索XML值或实例的方法:query()、value()、exist()和nodes()。

5 结束语

XML现已经逐渐成为Internet上数据表示和交换的新的标准,而关系数据库则是非常成熟的数据库技术,随着XML日益广泛的应用,将进一步推动XML数据库技术的新发展。

摘要:讨论了XML与关系数据库的转换原理以及XML的一般存储模式,重点讲述了XML-RDB存储方法并对XML文档的存储效率进行了分析,最后介绍了XML的查询方法。

关键词:XML,关系数据库,存储模式,查询

参考文献

[1]张振莲,李金莱.XML数据与关系数据库的转换及实现[J].南阳师范学院学报.2009,(12).

[2]门爱华,冯建华,周立柱.XML数据库存储策略综述[J].计算机科学.2008,(9).

[3]李由,黄凯歌,汤大权.XML的数据库存储技术研究[J].计算机应用研究.2008,(4).

[4]秦杰,杨树强,窦文华.XML数据库技术研究[J].计算机科学.2008,30(8).

篇8:Flash处理XML文档数据教程

1969年,Microsoft开发出了作为基本原理的.NET和一系列技术,用于在互联网中让计算机共同工作。总的目标就是让信息和进程在大范围的系统和设备之间顺畅地交流。确切地说,.NET是一套标准和规范,并已经应用于自2002年以来Microsoft发布的所有产品中。

.NET包含了一种使用开放标准的XML进行信息交换的标准化格式。XML不需要请求者具备任何有关数据存储、如何保存信息的专门知识———数据都是以自描述的XML格式取出。XML Web services允许应用程序通过Internet进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。Microsoft.NET平台提供创建XML Web services并将这些服务集成在一起之所需。同样地,目前几乎所有的数据存储都可以用XML来提供信息,这对于所有.NET数据客户都具有吸引力。

1 XML文档的操作

在.NET框架出现之前,人们习惯使用MSXML[3]服务这样一个基于COM的类库来编写Windows的XML驱动程序。MSXML类库的部分代码比API的层次更深,它完全嵌在操作系统底层。MSXML的确能够与应用程序进行交互,但是它不能真正与外部环境结合。而.NET框架给程序员提供了一套集成的XML工具,这是Microsoft公司第一次在它的开发平台中集成了对XML的支持。.NET在System.Xml命名空间中对XML的操作。该命名空间中的类符合W3C规范,因此可以提供各种各样的XML工具,用于生成Web应用程序和任何依赖于XML数据交换的方案。图1的对象提供了对XML文档基本的解析、查询、存储以及转换的功能。

这些对象从处理机制上来看,可以分为两种方式,该文讨论使用两种方式对XML文档进行遍历等操作。

1.1 ASP.NET中对XML数据的操作

XML文档的作用是存储和传输数据。而XML Schema是W3C关于XML的一系列标准中的一个[4,5],于2001年5月正式发布。XML Schema的主要目的是定义XML模式,利用定义的模式可以约束XML文档。这利于使用计算机对XML进行更准确的处理。DTD是随XML 1.0一起发布的一个标准,其目的与XML Schema相同,但是相比而言,XML Schema具有许多优势,例如,XML Schema提供了更丰富的数据类型,可以直接用XML书写,既有全局声明也有局部声明,支持命名空间等等。XMLSchema和XML一样,也是是一个树状结构(或者称为嵌套的层次结构),类似于关系数据库。相对于简单的DTD而言,XML Schema是一个更好的选择。在该文中,将构建一个基于XML Schema的XML数据库的存储系统。使用client.xsd和client.xml来阐述,client.xml文档的中存储了四个客户的信息,每个客户的信息包括编号(id)、姓名(name)、订单号(order)和交易金额(amount)。在确定XML文档结构时,选择clients作为文档的根元素,包含四个client元素,一个完整client元素包含了一个客户的全部信息,其中选择id作为client元素的属性,其他三个信息name、order和amount作为client元素的子元素。client.xsd和client.xml的结构如图2、图3所示。

1.1.1 使用DOM方式对XML数据进行处理

System.Xml含有一组将XML文档作为数据的对象。该数据可以通过XML文档树的节点、元素和属性等实体来访问。XML的这种生成和浏览方式非常灵活,但它比不上基于流的XML生成和浏览的性能。这种方式称为XML DOM解析器。DOM是一种基于树型的解析技术,将XML文档一次性解析,生成一个位于内存中的对象树用以描述该文档[6]。利用DOM很容易把XML文件转换成树型进行一系列操作,比如遍历、添加、删除、修改文档内容,具有良好的导航能力。所以DOM解析的优点就是解析的应用程序编写比较简单。但是,它在使用上却常常会受到系统资源的限制,尤其是内存。DOM在解析时是将整个文档载入内存中的,在内存中完全载入整个文档和构建完整树型结构成本很高。DOM是一种与平台和语言无关的接口,它允许程序和脚本动态访问和修改文档的内容、结构和类型。它定义了以下一系列的对象和方法对DOM树的节点进行各种随机操作:

(1)XmlDocument对象:作为树的最高节点,即节点树的根节点,XmlDocument对象是对整个文档进行操作的入口,每一个DOM文档必须有一个XmlDocument节点;

(2)XmlElement和XmlAttribute对象:这些节点对象都是文档某一部分的映射,节点的定级层次恰好反映了文档的结构;

(3)XmlText对象:作为XmlElement和XmlAttribute对象的子节点,Text对象表达了元素或属性的文本内容。Text节点不再包含任何子节点;

(4)集合索引:DOM提供了几种集合索引方式,可以对节点按指定方式进行遍历。索引参数都是从0开始记数的。

使用DOM方式对XML文档进行的操作包括:

1)遍历XML文档

2)添加节点

XML文档中的节点类型有许多种,添加不同类型的节点,所使用的方法也不一样。添加元素节点。添加一个元素的主要过程是:首先创建一个元素,接着把该元素添加至其父元素。其语法是:

添加元素属性。信息的存储可以采用子元素的形式,也能够为属性的形式。和添加元素有所差别,此处并不要形成一个属性类型的节点,把此节点添加至某元素中;而是直接把属性添加到某个元素节点上。其语法是:

client.SetAttribute("id","gr00003");

3)删除节点

相对与添加节点来说,删除XML文档中节点就相对简单一些,其主要任务是寻找到需要被删除的对象。该对象不但要元素名称要相同,而且它的属性值也要相同。

root.RemoveChild(client);

4)修改节点

修改XML节点的操作,能够总结成添加节点与删除节点的结合。对于不需要的信息,进行删除,而对于需要的信息,再进行添加,从而就达到了修改节点的目的。

1.1.2 使用流方式对XML数据进行处理

System.Xml中含有许多类,可以读取XML,并把XML写到流中,由于它表示的是一系列的读和写,所以使用这种方法可以快速使用或生成一个XML文档。使用该方法的局限性在于它并不将XML数据作为有形实体(如节点、元素和属性)组成的文档。这种方式被称为XML阅读器。

XML阅读器的客户端收到一个指向阅读器实例的引用,该实例提取底层的数据流并把取出的数据呈现为一棵XML树。阅读器类提供只读向前的游标,可以用阅读器类提供的方法滚动游标遍历结果集中的每条数据。阅读器与DOM解析器的不同之处在于阅读器没有父、子、兄弟节点的概念,而且是只读的。

类XmlReader的作用就是对输入流进行XML包装。它的Read方法可以快速的遍历一份文档,它只能向前,可以通过Value属性返回文档当前节点的值。XmlReader对XML文档默认采用深度优先遍历,也就是先访问元素的子元素,再访问它的兄弟元素。对于图中的树形结构,它的访问顺序如图4所示:

1.2 XML与SQL Server数据的互导

由于XML是跨平台的,很多时候需要将XML与数据库进行转换。下面介绍利用ASP.NET和DOM来实现SQL Server数据库和XML信息的转换,即如何把数据库中的信息提取出来生成所需要的XML文档,以及如何将XML文档中重要的信息写入到数据库中。

XML技术已经变成了Web上交换与表述数据的应用标准。为了更加有效地实施对XML数据的分析、加工与处理,提出了很多针对XML的存储管理技术与查询语言。因为关系数据库是当前非常成熟的数据存储和管理技术,采用关系数据库来实现对XML数据的存储与管理,就变成了一种合理有效的方式,受到了国内外广泛的关注。文中针对基于关系数据库的XML数据管理系统的实现进行了详细地描述。利用关系数据库成熟的技术,能够重用数据库的事务处理机制与查询优化器,可以确保XML数据的完整性与一致性,而且,将Web数据存储至关系数据库中,发挥Web领域关系数据库更大的作用。

1.2.1 SQL Server数据转换为XML数据

在SQL Server数据库中新建了一个名为ClientInfo的数据库,其中含有一个表格:Clients,存储客户的信息,表格的结构定义如表1所示。

在将表Clients中的数据转换为client.xml文档的C#控制台程序中,首先创建到数据库的链接,并读取数据,得到数据表;接着通过CreateXmlDeclaration方法创建XML声明,并通过AppendChild方法将该声明添加到文档中;通过CreateElement方法创建根元素clients并添加文档中;然后通过for循环读取数据库中数据表的每一行的信息,只要读到一行信息就创建一个client元素,通过方法SetAttribute方法将ClientID字段的值做client元素的属性id的属性值,其他字段的值都做client元素的相应子元素的值,一行信息处理完后,将相应的client元素做clients元素的子元素。for循环结束后数据表中所有行信息都处理完,那么XML文档中根元素clients元素有四个client子元素,每个client元素将客户所有的信息都保存下来,最后通过Save方法将所得的XML文档保存到指定位置。

1.2.2 XML数据转换为SQL Server数据

利用节点的控制将XML文档的信息写入到数据库中。首先设置到数据库的连接,接着创建XmlDocument对象,并载入要转换的XML文档;通过for循环依次提取XML文档中根元素clients的四个子元素client,每个client元素的属性或者子元素的值就是数据表中一行的信息,循环结束后将XML文档中四个客户的信息添加到数据库中的四行信息中,最后更新数据表。

2 结论

XML是目前Web应用最广泛的数据描述与交换标准,其文档处理方法是数据管理领域的一个重要问题。该文从XML的结构和内容的角度出发,在.NET平台对XML数据进行处理时,多数是采用基于DOM的方式,通过XML树型结构中节点之间的关系来进行遍历、添加、删除和修改操作。而XML阅读器对XML文档遍历时相对灵活,Read方法能够以流的形式自动地将XmlReader对象指向下一个节点,不需要知道当前节点与下一结点的关系。该文还探讨了采用DOM方式对数据库与XML进行互导。但是对于XML数据操作各种方式的效率与存储的有效性,仍然需要进一步的完善与改进。

参考文献

[1]XML规范V1版本[Z].1998.

[2]殷丽凤,郝忠孝.基于XML Schema的XML强多值依赖的推理规则集[J].计算机工程与应用.2010,46(8):152.

[3]MSXML[EB/OL].http://msdn.microsoft.com/en-us/library/bb291077.aspx.

[4]Wang X Z,Yang S A,Yang S H,et al.The Application of Fuzzy Qualitative Simulation in Safety and Operability Assessment of Process-Plants[J].Computers Chem Engng,1996(20):671-676.

[5]Tarifa E E,Scenna N J.Fault Diagnosis,Direct Graphs,and FuzzyLogic[J].Computers Chem Engng,1997(21):649-654.

上一篇:返乡农民工创业证明下一篇:辞猴迎鸡贺词「荟萃」