第七篇 高级应用.docx
- 文档编号:16682700
- 上传时间:2023-07-16
- 格式:DOCX
- 页数:38
- 大小:127.36KB
第七篇 高级应用.docx
《第七篇 高级应用.docx》由会员分享,可在线阅读,更多相关《第七篇 高级应用.docx(38页珍藏版)》请在冰点文库上搜索。
第七篇高级应用
第七篇高级应用
第一章XML及其应用
XML是标准扩展语言的简称,是未来Web编程的标准。
在这一章中,我们将讲述XML在ASP.NET中的应用
7.1.1制作广告条
在这个程序中,我们通过XML语言实现每次访问网页时,将显示不同的广告条。
在本例中,我们只调用了两条广告
源文件:
advanceapp\intro.aspx
Intro.aspx的代码如下:
广告条演示
adrotatorAdvertisementFile="intro.xml"BorderColor="black"BorderWidth=1runat="server"/>
intro.xml的代码如下:
在intro.aspx中,我们使用了 adrotatorAdvertisementFile="intro.xml"BorderColor="black"BorderWidth=1runat="server"/>这条语句来嵌入intro.xml文件。 运行效果如图: 当我们点刷新按狃或者按F5键,我们将看到另一条广告条。 在本例中,我们用到了AdRotator服务器控件,在xml文件中,我们我们可以定义其属性: 如表所示: 属性 描述 ImageUrl 图象文件的绝对或相对地址 NavigateUrl 当图象被点击时,可访问相应的网页 AlternateText 当鼠标移动到图片上时,将显示提示信息 Keyword 指定广告条的分类,我们可以利用此属性来对广告条进行分类 Impressions 指定图片在表格中的大小 7.1.2XML和dataset控件结合使用 数据访问是一个应用系统的核心。 公用语言运行环境(CommonLanguageRuntime)提供了管理数据访问应用程序接口(API)的方法。 而这些API将不论它的数据源是什么,如SQLServer,OLEDB,XML等,都能提取出我们所需要的数据。 我们在具体编程的时候,有3个对象将常常用到: Connections,Commands,andDataSets。 对象 描述 Connection 与数据源进行连接。 如SQLServer或者一个XML文件。 Command 对数据进行操纵。 如进行删除(delete),提取(select),更新(update) Dataset 显示出所需的数据 为了使我们能使用 SQL语句,我们要先导入System.Data和System.Data.SQL这两个名字空间。 语句如下: <%@ImportNamespace="System.Data"%> <%@ImportNamespace="System.Data.SQL"%> 下面的表格是对几个典型的SQL语句的说明: SQL语句 示例 Select(对单个表的操作) SELECT*fromStudentWHEREstuname=‘小李’; Select(对多个表的操作) SELECT*fromStudentS,DeptDWHERES.dept=D.dept; Insert INSERTintoStudentVALUES('小王',21,’男’); Delete DELETEfromStudentWHEREname=’小王’; Update UPDATEStudentSETage=21WHEREname=’小李’; 在执行查询之前,我们要先构件一个SQLDataSetCommand对象,在执行查询以后,我们需要把数据转移到DataSet中,我们可以使用下面的代码: 我们假设有一个test数据库,在这个数据库中有一个student表。 DimmyConnectionAsNewSQLConnection("server=localhost;uid=sa;pwd=;database=test") DimmyCommandAsNewSQLDataSetCommand("select*fromstudent",myConnection) DimdsAsNewDataSet() myCommand.FillDataSet(ds,"student") 可能读者不禁要问: 为什么要用XML文件存储数据吗? 为什么不使用数据库? 这是因为: 对很多目的用途来说,用数据库太过浪费了。 .要使用一个数据库,你必须安装和支持一个分离的服务器处理进程(aseparateserverprocess),它常要求有安装和支持它的管理员(administrator)。 你必须学习SQL语句,并用SQL语句写查询,然后转换数据,再返回。 而如果你用XML文件存储数据,将可减少额外的服务器的负荷。 还有,你还找到了一个编辑数据的简单方法。 你只要使用文本编辑器,而不必使用复杂的数据库工具。 XML文件很容易备份,和朋友共享,或下载到你的客户端。 同样的,你可以方便地通过ftp上载新的数据到你的站点。 XML还有一个更抽象的优点,即作为层次型的格式比关系型的更好。 它可以用一种很直接的方式来设计数据结构来符合你的需要。 你不需要使用一个实体-关系编辑器,也不需要使你的图表(schema)标准化。 如果你有一个元素(element)包含了另一个元素,你可以直接在格式中表示它,而不需要使用表的关联。 注意,在很多应用中,依靠文件系统是不够充分的。 如果更新很多,文件系统会因为同时写入而受到破坏。 数据库则通常支持事务处理,可以应付所发生的请求而不至于损坏。 对于复杂的查询统计要有反复、及时的更新,此时数据库表现都很优秀。 当然,关系型数据库还有很多优点,包括丰富的查询语言,图表化工具,可伸缩性,存取控制等等。 在下面这样的案例中,正如大多数中小规模的、基于发布信息的站点一样,你可能涉及的大多数数据存取都是读,而不是写,数据虽然可能很大,但相对来说并没有经常的更新变化,你也不需要做很复杂的查询,即使你需要做,也将用一个独立的查询工具,那么成熟的rdbms的优点消失了,而面向对象型的数据模型的优点则可以得到体现。 最后,为你的数据库提供一个查询器外壳来进行SQL查询并将他们转化进入xmlstream也是完全有可能的。 所以你可以选择这二种方式之一。 XML正变成一种非常健壮的,便于编程的工具,作为某个成熟的数据库的前端工具来进行存储和查询。 (oracle的xsqlservlet即是这种技术的一个很好的例子。 ) 7.1.3XML语法 现在我们来介绍一下XMLSchemas: 随着XMLSchema规范的逐渐普及,它成为W3C推荐标准的那一天已经不远了。 我们来看一下这个新的定义文档类型的方法。 一、定义元素 文档类型定义的工作现在大都是由DTDs来完成的,现在的DTD在功能上有一些限制,随着XML应用的越来越广泛,这些限制逐渐阻碍了XML的发展。 DTD的语法不同于XML的语法,因而需要文档编写者另外的学习一套符号语言。 而软件也需要另外的一个解析器来对DTD文件进行解析。 在DTD中没有办法来定义能够从程序语言变量直接映射到XML数据的数据类型和数据格式。 没有一组被人所熟知的基本的元素以供文档编写者选择。 DTDs是XML从其前辈SGML那儿继承过来的(事实上,XML本身就是一种SGML的简化版本),这个相对比较成熟的技术能够很快的让XML运行起来,并且能够让熟悉SGML的人对XML有更多的感觉。 然而,很快的人们就发现,XML需要一种更具表达能力的解决方案,而不仅仅是DTD。 定义元素需要指定元素的名称、元素的内容模式、元素的属性、以及内嵌的子元素。 在XMLSchemas中,元素的内容模式是通过类型来定义的。 一个服从于某个特定的schema的XML文档只能按照schema中定义的元素模式来编写,这同DTD的规则是一样的。 元素可以是简单类型的,也可以是复杂类型的。 在Schemas规范中定义了很多的简单类型,例如: string,integer和decimal。 简单类型的元素不能在包含子元素和属性,而复杂类型的元素则能够嵌套子元素,并能够包含有属性。 我们来看看一个简单的定义元素的例子: 我们知道在面向对象的观点中,有聚集和继承的概念,可以在已有的类中衍生出新类。 在这儿Schema借用了这些观点,用户也可以通过聚集和继承来在老元素的基础上定义新的元素。 聚集能够把一组已存在的元素组合成一个新的元素。 继承则通过扩展已存在的元素来定义一个新的元素,并且这个新的元素能够代表被继承的那个元素。 比如,如果我们要从decimal类型中派生一个新的value元素,并让它有这样的内容模式: 下面我们把time和value元素聚集到一个measurement元素中,形成这样的内容模式: 00: 00GMT 那么最终我们的schema元素定义结果就应该是这样的: 和上面的schema等同DTD是: ELEMENTmeasurement(time,value)> ELEMENTtime(#PCDATA)> ELEMENTvalue(#PCDATA)> ATTLISTvalue(unit)> 显然,它所能表达的意思就少了很多。 从Java等面向对象语言中引入的继承的特性,还包括了可以定义抽象元素来迫使实现子类元素,或者定义一个终结元素来禁止元素再被其它元素所继承。 这使得从元素到Java或者C++语言的类的一一映射变得更为直观可行。 二、基数表达 XMLSchema比起DTD来能够更方便的表达元素基数的概念。 所谓基数是指一个元素在文档中出现的次数。 在DTD中,使用的是正则表达式来表示基数的,而正则表达式的表达能力在所有的形式化文法中是最低的,这使得你在定义文档的时候会遇到很多的困难。 你只能够指定一次 (1),零次或者更多(*),一次或者更多(+)这三种基数,并用这些基数序列来构成DTD。 XMLSchema中则是使用minOccurs和maxOccurs这两个属性来定义元素基数,分别用来指定元素出现的最少次数和最多次数: minOccurs和maxOccurs的缺省值都是1,也就是说,当没有指定这两个属性的时候,元素只允许在文档中出现一次。 除了这两个属性,你还可以用choice和all这两个元素。 元素choice只允许它的所有子元素中的一个出现在文档中。 而元素all则最为宽松,能够让其所有的子元素在文档中以任意的顺序出现任意的次数。 而这些概念在DTD中都是难以表达的。 choice> choice> all> all/> 三、名域 XMLSchema中还支持名域。 一个Schema除了可以定义XML文档词汇表外,还可以通过名域来定义目标名域,和其它可能会使用到的词汇名域。 例如: schematargetNamespace=&single;xmlns: xsd=&single;http: //www.w3.org/1999/XMLSchema&single;xmlns: units=&single; elementname=&single;units&single;type=&single;units: Units&single;/> elementname=&single;measurement&single;type=&single;measurement&single;/> 这种机制为建立复杂的名域体系提供了一种模块化而又易于扩展的方法。 使得名域的作用能够真正的被体现出来。 XMLSchema提供了一个丰富而更具弹性的机制来定义XML文档词汇表。 它使用XML语言本身来定义关于一个XML文档的元信息(meta-information),这使得XML的协同工作能力大大的增强了。 而许多对于DTD功能上的改进和增强,也使得它最终必定会终结DTD,作为XML的一个标准出现。 在ApacheProject和IBMalphaworks的主页上现在已经有很多的Schema的工具出现了,你如果有兴趣的话,不妨去看看。 好了,有上面的介绍,我们来看如何从xml文件中读取数据。 DataSet控件提供了ReadXml方法。 同时在XML文件中,必须存在schema和我们所需要的数据(Data)。 好了,有了上面的介绍,我们先看一下data1.aspx文件: 源文件: advanceapp\data1.aspx <%@ImportNamespace="System.IO"%> <%@ImportNamespace="System.Data"%> XML演示 SubPage_Load(SrcAsObject,EAsEventArgs) DimDSAsNewDataSet DimFSAsFileStream DimReaderAsStreamReader FS=NewFileStream(Server.MapPath("data1.xml"),FileMode.Open,FileAccess.Read) Reader=NewStreamReader(FS) DS.ReadXml(Reader) FS.Close() DimSourceAsDataView Source=newDataView(ds.Tables(0)) MySpan.InnerHtml=Source.Table.TableName MyDataGrid.DataSource=Source MyDataGrid.DataBind() EndSub
XML演示
DataGridid="MyDataGrid"runat="server"/> 我们再来看看 xml文件(advanceapp\data1.aspx)的内容: data1.xml的文件如下:
//www.w3.org/1999/XMLSchema"xmlns: xdo="urn: schemas-microsoft-com: xml-xdo"xdo: DataSetName="DocumentElement"> 程序运行后演示如下: 当然我们也可以把schema和数据分开成对立的文件。 在主文件中,我们要分别使用theReadXmlData和ReadXmlSchema方法。 如: 读取schema.xml的内容: FS=NewFileStream(Server.MapPath("schema.xml"),FileMode.Open,FileAccess.Read)Schema=newStreamReader(FS) DS.ReadXmlSchema(Schema) FS.Close() 读取data.xml的内容: FS=NewFileStream(Server.MapPath("data.xml"),FileMode.Open,FileAccess.Read) Reader=NewStreamReader(FS) DS.ReadXmlData(Reader) FS.Close() 我们上面提到的data1.xml分成两部分: 第一部分: 生成schema.Xml文件: //www.w3.org/1999/XMLSchema"xmlns: xdo="urn: schemas-microsoft-com: xml-xdo"xdo: DataSetName="DocumentElement">
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第七篇 高级应用 第七 高级 应用