第六章 .NET框架 本章学习目标: 认识.NET框架的基本知识,通过.NET框架的 System命名空间及其通用语言运行环境获取计算机 系统当前基本信息,监视文件系统变化,了解系统 注册表操作,编程实现文本文件的读写、复制和删 除等基本操作,通过在编程过程中使用哈希表来认 识.NET集合,通过编程认识进行XML文档编辑的方 法。 本章学习要点: 掌握.NET Framework的概念、实现目标和主要组成部分 通过System 命名空间的系统服务类获取系统信息的一般方法 掌握文件类型和文本文件的读写、复制、删除等基本操作 学习通过文件系统监视器控件监视文件系统的变化 学习通过Microsoft.Win32命名空间对操作系统注册表进行操作。 通过哈希表设计具有XML文件支持功能的实用编辑程序 6.1 .NET 框架概念 .NET Framework 是支持生成和运行下一代应用程序和XML Web services的内部Windows组件。.NET Framework旨在 实现下列目标: (1)一致的面向对象的编程环境。 (2)将软件部署和版本控制冲突最小化的代码执行环境。 (3)可提高代码(包括由未知或不完全受信任的第三方创建的代 码)执行安全性的代码执行环境。 (4)可消除脚本环境或解释环境的性能问题的代码执行环境。 (5)使开发人员的经验在面对类型大不相同的应用程序时保持一 致。 (6)按照工业标准生成所有通信,以确保基于.NET Framework 的代码可与任何其他代码集成。 .NET Framework两个主要组件:公共语言运行 库和.NET Framework类库。公共语言运行库 是.NET Framework的基础。可以将运行库看 作一个在执行时管理代码的代理,它提供内 存管理、线程管理和远程处理等核心服务, 并且还强制实施严格的类型安全以及可提高 安全性和可靠性的其他形式的代码准确性。 公共语言运行库和类库与应用程序之间以及与整个系统之间 的关系如下图所示。 图6.1公共语言运行库与其他部分的关系 各组成部分之间的关系 图6.2 .NET框架主要组成 6.2 公共语言运行库 公共语言运行库(CLR)的功能是通过编译器 和工具公开,编写利用此托管执行环境的代 码。使用基于公共语言运行库的语言编译器 开发的代码称为托管代码;托管代码具有许 多优点,例如:跨语言集成、跨语言异常处 理、增强的安全性、版本控制和部署支持、 简化的组件交互模型、调试和分析服务等。 公共语言规范是公共语言运行库(CLR)的一部分。它们之间 的关系如下图所示。 图6.3 .NET框架支持多种程序设计语言 中间语言代码编译成可以执行的机器代码整 个过程如图6.4所示。 图 6.4从源程序转变成可执行代码过程 公共语言运行库的一些优点: (1)性能得到了改进。 (2)能够轻松使用其他语言开发的组件。 (3)类库提供的可扩展类型。 (4)新的语言功能,如面向对象的编程的继承、接口和 重载;允许创建多线程的可缩放应用程序的显式自 由线程处理支持;结构化异常处理和自定义属性支 持。 .NET Framework包括的类执行下列功能: (1)表示基础数据类型和异常。 (2)封装数据结构。 (3)执行I/O。 (4)访问关于加载类型的信息。 (5)调用.NET框架安全检查。 (6)提供数据访问、多客户端GUI和服务器 控制的客户端GUI。 6.3 System命名空间 6.3.1命名空间 命名空间是组织类的一种机制。命名空 间不仅组织程序,而且组织程序元素, 显示给其他程序元素的方式。 下图说明了两个命名空间层次结构,它们都包含名为 ListBox的对象。 图6.5都包含ListBox对象的两命名空间层次结构 命名空间的使用方法主要有两种: 1)直接使用 在程序中,任何一个命名空间均可以在代码中直接 使用。 比如在程序代码中直接使用.NET的命名空间System: System.Console.WriteLine.

Download Report

Transcript 第六章 .NET框架 本章学习目标: 认识.NET框架的基本知识,通过.NET框架的 System命名空间及其通用语言运行环境获取计算机 系统当前基本信息,监视文件系统变化,了解系统 注册表操作,编程实现文本文件的读写、复制和删 除等基本操作,通过在编程过程中使用哈希表来认 识.NET集合,通过编程认识进行XML文档编辑的方 法。 本章学习要点: 掌握.NET Framework的概念、实现目标和主要组成部分 通过System 命名空间的系统服务类获取系统信息的一般方法 掌握文件类型和文本文件的读写、复制、删除等基本操作 学习通过文件系统监视器控件监视文件系统的变化 学习通过Microsoft.Win32命名空间对操作系统注册表进行操作。 通过哈希表设计具有XML文件支持功能的实用编辑程序 6.1 .NET 框架概念 .NET Framework 是支持生成和运行下一代应用程序和XML Web services的内部Windows组件。.NET Framework旨在 实现下列目标: (1)一致的面向对象的编程环境。 (2)将软件部署和版本控制冲突最小化的代码执行环境。 (3)可提高代码(包括由未知或不完全受信任的第三方创建的代 码)执行安全性的代码执行环境。 (4)可消除脚本环境或解释环境的性能问题的代码执行环境。 (5)使开发人员的经验在面对类型大不相同的应用程序时保持一 致。 (6)按照工业标准生成所有通信,以确保基于.NET Framework 的代码可与任何其他代码集成。 .NET Framework两个主要组件:公共语言运行 库和.NET Framework类库。公共语言运行库 是.NET Framework的基础。可以将运行库看 作一个在执行时管理代码的代理,它提供内 存管理、线程管理和远程处理等核心服务, 并且还强制实施严格的类型安全以及可提高 安全性和可靠性的其他形式的代码准确性。 公共语言运行库和类库与应用程序之间以及与整个系统之间 的关系如下图所示。 图6.1公共语言运行库与其他部分的关系 各组成部分之间的关系 图6.2 .NET框架主要组成 6.2 公共语言运行库 公共语言运行库(CLR)的功能是通过编译器 和工具公开,编写利用此托管执行环境的代 码。使用基于公共语言运行库的语言编译器 开发的代码称为托管代码;托管代码具有许 多优点,例如:跨语言集成、跨语言异常处 理、增强的安全性、版本控制和部署支持、 简化的组件交互模型、调试和分析服务等。 公共语言规范是公共语言运行库(CLR)的一部分。它们之间 的关系如下图所示。 图6.3 .NET框架支持多种程序设计语言 中间语言代码编译成可以执行的机器代码整 个过程如图6.4所示。 图 6.4从源程序转变成可执行代码过程 公共语言运行库的一些优点: (1)性能得到了改进。 (2)能够轻松使用其他语言开发的组件。 (3)类库提供的可扩展类型。 (4)新的语言功能,如面向对象的编程的继承、接口和 重载;允许创建多线程的可缩放应用程序的显式自 由线程处理支持;结构化异常处理和自定义属性支 持。 .NET Framework包括的类执行下列功能: (1)表示基础数据类型和异常。 (2)封装数据结构。 (3)执行I/O。 (4)访问关于加载类型的信息。 (5)调用.NET框架安全检查。 (6)提供数据访问、多客户端GUI和服务器 控制的客户端GUI。 6.3 System命名空间 6.3.1命名空间 命名空间是组织类的一种机制。命名空 间不仅组织程序,而且组织程序元素, 显示给其他程序元素的方式。 下图说明了两个命名空间层次结构,它们都包含名为 ListBox的对象。 图6.5都包含ListBox对象的两命名空间层次结构 命名空间的使用方法主要有两种: 1)直接使用 在程序中,任何一个命名空间均可以在代码中直接 使用。 比如在程序代码中直接使用.NET的命名空间System: System.Console.WriteLine.

第六章 .NET框架
本章学习目标:
认识.NET框架的基本知识,通过.NET框架的
System命名空间及其通用语言运行环境获取计算机
系统当前基本信息,监视文件系统变化,了解系统
注册表操作,编程实现文本文件的读写、复制和删
除等基本操作,通过在编程过程中使用哈希表来认
识.NET集合,通过编程认识进行XML文档编辑的方
法。
本章学习要点:
掌握.NET Framework的概念、实现目标和主要组成部分
通过System 命名空间的系统服务类获取系统信息的一般方法
掌握文件类型和文本文件的读写、复制、删除等基本操作
学习通过文件系统监视器控件监视文件系统的变化
学习通过Microsoft.Win32命名空间对操作系统注册表进行操作。
通过哈希表设计具有XML文件支持功能的实用编辑程序
6.1 .NET 框架概念
.NET Framework 是支持生成和运行下一代应用程序和XML
Web services的内部Windows组件。.NET Framework旨在
实现下列目标:
(1)一致的面向对象的编程环境。
(2)将软件部署和版本控制冲突最小化的代码执行环境。
(3)可提高代码(包括由未知或不完全受信任的第三方创建的代
码)执行安全性的代码执行环境。
(4)可消除脚本环境或解释环境的性能问题的代码执行环境。
(5)使开发人员的经验在面对类型大不相同的应用程序时保持一
致。
(6)按照工业标准生成所有通信,以确保基于.NET Framework
的代码可与任何其他代码集成。
.NET Framework两个主要组件:公共语言运行
库和.NET Framework类库。公共语言运行库
是.NET Framework的基础。可以将运行库看
作一个在执行时管理代码的代理,它提供内
存管理、线程管理和远程处理等核心服务,
并且还强制实施严格的类型安全以及可提高
安全性和可靠性的其他形式的代码准确性。
公共语言运行库和类库与应用程序之间以及与整个系统之间
的关系如下图所示。
图6.1公共语言运行库与其他部分的关系
各组成部分之间的关系
图6.2 .NET框架主要组成
6.2 公共语言运行库
公共语言运行库(CLR)的功能是通过编译器
和工具公开,编写利用此托管执行环境的代
码。使用基于公共语言运行库的语言编译器
开发的代码称为托管代码;托管代码具有许
多优点,例如:跨语言集成、跨语言异常处
理、增强的安全性、版本控制和部署支持、
简化的组件交互模型、调试和分析服务等。
公共语言规范是公共语言运行库(CLR)的一部分。它们之间
的关系如下图所示。
图6.3 .NET框架支持多种程序设计语言
中间语言代码编译成可以执行的机器代码整
个过程如图6.4所示。
图 6.4从源程序转变成可执行代码过程
公共语言运行库的一些优点:
(1)性能得到了改进。
(2)能够轻松使用其他语言开发的组件。
(3)类库提供的可扩展类型。
(4)新的语言功能,如面向对象的编程的继承、接口和
重载;允许创建多线程的可缩放应用程序的显式自
由线程处理支持;结构化异常处理和自定义属性支
持。
.NET Framework包括的类执行下列功能:
(1)表示基础数据类型和异常。
(2)封装数据结构。
(3)执行I/O。
(4)访问关于加载类型的信息。
(5)调用.NET框架安全检查。
(6)提供数据访问、多客户端GUI和服务器
控制的客户端GUI。
6.3 System命名空间
6.3.1命名空间
命名空间是组织类的一种机制。命名空
间不仅组织程序,而且组织程序元素,
显示给其他程序元素的方式。
下图说明了两个命名空间层次结构,它们都包含名为
ListBox的对象。
图6.5都包含ListBox对象的两命名空间层次结构
命名空间的使用方法主要有两种:
1)直接使用
在程序中,任何一个命名空间均可以在代码中直接
使用。
比如在程序代码中直接使用.NET的命名空间System:
System.Console.WriteLine ("北京欢迎你")
表示System命名空间的控制台类Console的
WriteLine方法将指定的数据写入标准输出流。
2)通过Imports语句引用命名空间
格式:Imports<NameSpace> ,把NameSpace
指定的命名空间引入到当前应用程序中。例如:
Imports System.Windows.Forms
表示引入名为System.Windows.Forms的命名空
间,它是Windows窗体控件所在的命名空间,
使我们在程序的后继代码中可以直接写出
windows命名空间中的类。
(2)创建命名空间
使用VB.NET开发程序时,不仅能使用系统已有的命名空
间,还可以通过NameSpace语句创建命名空间,格式
如下:
Namespace Training
Public Class Teacher
…
End Class
Public Class Student
…
End Class
End Namespace
6.3.2 System命名空间
System命名空间包含用于定义常用值和引
用数据类型、事件和事件处理程序、接口、
属性和处理异常的基础类和基类。
6.3.3运用命名空间创建新控件
在实际编程时,如果想在编写某个程序的时候
使用目前没有的功能更强的控件,就需要自
己去创建。我们可以仿照例6.1中提供的方法
来创建并使用新控件,效果如图6.6至6.8。
图6.6 在MDI窗体中创建菜单
图6.7文字的编辑设置
图6.8打印预览
6.4用系统服务类获取系统信息
System命名空间包含许多系统服务类,用这
些系统服务类可以获得系统信息和管理应
用程序运行的环境和状态。
主要利用的类是System.Environment,它提
供有关当前环境和平台的信息以及操作它
们的方法。
Environment 属性
名称
说明
CommandLine
获取该进程的命令行
CurrentDirectory 获取和设置当前目录的完全限定路径。
(即该进程从中启动的目录)
MachineName
获取此本地计算机的 NetBIOS 名称。
NewLine
获取为此环境定义的换行字符串。
OSVersion
获取包含当前平台标识符和版本号的
OperatingSystem 对象。
SystemDirectory 获取系统目录的完全限定路径。
Environment 属性
属性
说明
ProcessorCount
获取当前计算机上的处理器数。
TickCount
获取系统启动后经过的毫秒数。
UserDomainName 获取与当前用户关联的网络域名
UserName
获取启动当前线程的人的用户名。
Version
获取一个描述公共语言运行库的
主版本、次版本、内部版本和修
订号的对象。
可以按例6.2方法开发一个显示系统信息的小应
用程序,程序能显示一些基本信息。这些信息
System命名空间中的类来获取,效果见图6.9 。
图6.9显示系统信息小程序
6.5 文件读写操作
传统的VB文件访问模式
传统VB提供了3种文件访问模式:
• 顺序访问模式
• 随机访问模式
• 二进制访问模式。
.NET的文件系统操作
在.NET Framework 的System.IO命名空间包含了提供
操作文件和目录的基本功能的类。
IO 命名空间包含 File 和 Directory 类,它们提供操
作文件和目录的 功能。因为这些对象的方法是静态
或共享成员,所以可以直接使用它们,而无需先创
建类的实例。
FileInfo 和 DirectoryInfo 类与上面这两个类相关联,
并将为 My 功能的用户所熟悉。若要使用这些类,
您必须通过在受影响代码的开头处包含 Imports 语
句来完全限定其名称或者导入适当的命名空间。
System.IO命名空间
System.IO命名空间提供了用于处理文件和
流的类与类方法。包括:
类
Directory
说明
公开用于创建、移动和枚举通过目录和子目录的静态方法。
DirectoryInfo 公开用于创建、移动和枚举目录和子目录的实例方法。
File
提供用于创建、复制、删除、移动和打开文件的静态方法,
并协助创建 FileStream 对象。
FileInfo
提供创建、复制、删除、移动和打开文件的实例方法,并且
帮助创建 FileStream 对象。
System.IO命名空间
类
说明
Path
对包含文件或目录路径信息的 String 实例执行操作。这
些操作是以跨平台的方式执行的。
Stream
提供字节序列的一般视图。
IOException
发生 I/O 错误时引发的异常
FileInfo
FileSystemInfo为 FileInfo 和 DirectoryInfo 对象提供基
类。
FileSystemW
atcher
侦听文件系统更改通知,并在目录或目录中的文件发生更
改时引发事件。
DriveInfo
提供对有关驱动器的信息的访问。
流的基本概念
VB.NET将文件看成是顺序的字节流,每个
文件以特定的结束标识符标识结尾。如图所
示:
1
1
1
1
n-1
结束标志
N字节文件的VB.NET视图
流是字节序列的抽象概念,文件可以看成是存储在磁盘
上的一系列二进制字节信息,VB.NET用流对其进行输入、
输出操作, 例如:读取文件信息、向文件写入信息。
VB.NET的System.IO命名空间提供相关的类,通过这些
类或派生类的方法,可以进行文件的读写操作。
VB.NET的流
VB.NET提供Stream 类(System.IO成员),
是所有流的基类。这些派生类包括:
⑴文件流FileStream: 用与读写文件能自动
缓存(管理内存缓冲区)数据
⑵缓冲区流BufferedStream:可以面向另一
个流进行读取,减少对操作系统的调用次数,
提高性能。
⑶内存流:用于内存的读写访问。
应用File类进行文件操作
File类提供各种文件操作,如:创建、删除、移动、
复制、打开等静态方法。能够协助创建文件流
FileStream对象。
File
Stream
FileStream
TextReader
StreamReader
StringReader
TextWriter
StreamWriter
StringWriter
文件的基本概念
⑴文件属性:
只读、隐藏、归档
⑵访问方式:
读、读写、写
⑶访问权限:
读、写、追加数据等
⑷共享权限:
文件共享、文件不共享
文件常用方法
Copy、Delete、Move、Exists、Open方法
注意:本类不能被实例化(不需创建类的对象)
例如:
Dim bFile As Boolean
bFile = File.Exists(F:\\Myfile.doc)
File.Delete(F:\\Myfile.doc,
D:\\Myfile.doc)
File.Copy(F:\\Myfile.doc, D:\\Myfile.doc)
FileStream 属性
方法
说明
Read
从流中读取字节块并将该数据写入给定缓冲区中。
Length
获取用字节表示的流长度。
Position
获取或设置此流的当前位置。
Name
获取传递给构造函数的 FileStream 的名称。
CanRead 获取一个值,该值指示当前流是否支持读取。
CanWrite 获取一个值,该值指示当前流是否支持写入。
FileStream 方法
方法
说明
Read
从流中读取字节块并将该数据写入给定缓冲区中。
Write
使用从缓冲区读取的数据将字节块写入该流。
Close
关闭当前流并释放与之关联的所有资源。
Flush
Seek
清除该流的所有缓冲区,使得所有缓冲的数据都
被写入到基础设备。
将该流的当前位置设置为给定值。
Read
Byte
从文件中读取一个字节,并将读取位置提升一个
字节。
StringReader 成员
方法
Read
ReadLine
说明
读取输入字符串中的下一个字符或下一组
字符。
从基础字符串中读取一行。
ReadToEnd 将整个流或从流的当前位置到流的结尾作
为字符串读取。
Peek
返回下一个可用的字符,但不使用它。
Close
关闭 StringReader。
StringWriter 成员
成员
说明
Write方法
写入到 StringWriter 的此实例中。
WriteLine 写入重载参数指定的某些数据,后跟行结
方法
束符。
Close 方法 关闭当前的 StringWriter 和基础流。
NewLine属 获取或设置由当前 TextWriter 使用的行
性
结束符字符串。
控制台应用程序
 创建临时文件并用open方法打开以读取其内容
图6.10 控制台应用程序执行结果
Directory类
 用于典型操作如移动、创建和删除目录,也可用于
获取和设置与目录的创建、访问及写入操作相关的
日期时间信息。
 由于Directory类的方法是静态的,如果只想执行一
个操作,那么使用Directory效率比较高。从另一方
面来说,静态会对所用方法都执行安全检查,如果
打算多次重用某个对象,可考虑改用DirectoryInfo
相应实例方法,因为并不总是需要安全检查,在接
受路径作为输入字符串的成员中,路径必须是正确
的,否则将引发异常。
Directory 类主要的公共方法
名
称
说
明
CreateDirectory
创建指定路径中的所有目录。
Delete
删除指定的目录。
Exists
确定给定路径是否引用磁盘上的现有目录。
GetCreationTime
获取目录的创建日期和时间。
GetCurrentDirectory
获取应用程序的当前工作目录。
GetDirectories
获取指定目录中子目录的名称。
GetFiles
返回指定目录中的文件的名称。
GetFileSystemEntries 返回指定目录中所有文件和子目录的名称。
GetLogicalDrives
检索计算机上格式为“<驱动器号>:\”的逻辑驱动器的名
称。
GetParent
检索指定路径的父目录,包括绝对路径和相对路径。
Move
将文件或目录及其内容移到新位置。
SetCurrentDirectory
将应用程序的当前工作目录设置为指定的目录。
应用Directory类进行文件夹操作
Directory类提供各种目录操作
如:读取目录信息、创建、删除、测试等
Dim Filename(), driv() , Ftime As String
Filename = Directory.GetFiles("D:\\")
返文件名的数组
driv = Directory.GetLogicalDrives() 返回
驱动器的数组
Ftime = File.GetCreationTime(Filename(0))
FileSystemInfo类
此类包含文件和目录操作的方法,为 FileInfo
和 DirectoryInfo 对象提供基类。
当分析文件和目录时,一般使用该基类。
FileInfo和DirectoryInfo类
FileInfo类提供创建、复制、删除、移动和打开文件的实例
方法。许多 FileInfo 方法在您创建或打开文件时返回其
他 I/O 类型。可以使用这些其他类型进一步操作文件。有
关更多信息,请参见特定的 FileInfo 成员,如Open、
OpenRead、OpenText、CreateText 或 Create。如果打算
多次重用某个对象,可考虑使用 FileInfo 的实例方法,
而不是 File 类的相应静态方法,因为并不总是需要安全
检查。在默认情况下,将向所有用户授予对新文件的完全
读/写访问权限。
DirectoryInfo 类用于创建、移动和枚举目录和子目录的
实例方法。典型操作,如复制、移动、重命名、创建和删
除目录。如果打算多次重用某个对象,可考虑使用
DirectoryInfo 的实例方法,而不是 Directory 类的相应
静态方法,因为并不总是需要安全检查。
file和fileinfo的比较
向文件中追加文本
File.AppendText FileInfo.AppendText
重命名或移动文件
File.Move
删除文件。
File.Delete
复制文件。
File.Copy
获取文件大小。
FileInfo.Length
获取文件属性。
设置文件属性。
File.GetAttributes
File.SetAttributes
确定文件是否存在。 File.Exists
FileInfo.MoveTo
FileInfo.Delete
FileInfo.CopyTo
例6.5设计程序进度指示器执行及搜索结果见图6.11和图6.12。
图6.11程序执行进度指示器结果
图6.12搜索结果
6.6 监视文件系统的变化
 使用.NET 框架提供的FileSystem Watcher
( 文件系统监视器 ) 控件建立的程序可以在
有文件创建和删除的时候,把消息列在窗体
上。程序提供了类似于Windows提供的在有文
件的创建、删除事件发生的时候通知文件系
统变化的服务,用法见例6.6,其所用控件及
相应程序运行结果如图 6.13 所示。
图 6.13文件系统监视器
图6.14窗体显示新建文本文件
图6.15窗体显示文本文件被删除
6.7访问Windows注册表
系统注册表的每个注册表项之下还可以有注册表项,
在注册表项之下还可以有一些值 (Value),记录系统、
用户和软件等信息。
.NET框架提供了访问系统注册表的支持,
Microsoft.Win32命名空间主要提供了两种服务:
一种是用于处理操作系统引发的事件的服务,另一
种则是对操作系统的注册表进行操作的服务。添加
注册表项及相应数值的注册表编辑程序见例6.7。
在例6.7中所设计的窗体见下图。
图6.16添加注册表项及相应数值窗体
6.8集合的使用
Visual Basic.NET使用的.NET框架类库包含
在现代面向对象程序设计语言中常用的基
本数据结构(链表、堆栈、队列、哈希表)
的类库,它们位于System.Collections命名
空间中, System.Collections 命名空间
包含接口和类,这些接口和类定义各种对
象(如列表、队列、位数组、哈希表和字
典)的集合。
我们将通过哈希表(Hashtable)的用法来学
习.NET集合类。哈希表有点像数组,但是哈
希表可以以任何东西为下标, 哈希表即使包含
很多元素时, 查找某一个元素的速度也非常快,
查找时间接近于恒定。哈希表用法见例6.8
产品信息编辑程序,其程序运行结果如图
6.24所示。
图6.24产品信息编辑程序运行结果
6.9 接触XML
6.9.1 XML的含义
可扩展标记语言 (XML) 是一种提供数据描述格式的标记
语言。XML 是 Visual Studio 和 .NET Framework 的许多
功能的核心。该语言使跨越多个平台进行更准确的内容声明
和获得更有意义的搜索结果变得更加容易。此外,XML 实现
了表示与数据的分离。例如,在 HTML 中,使用标记来告诉
浏览器将数据显示为粗体或斜体;而在 XML 中,标记只用
于描述数据。在 XML 中,使用样式表(例如,可扩展样式
表语言 (XSL) 和层叠样式表 (CSS))在浏览器中显示数据。
XML 使数据与表示及处理分离开来,通过应用不同的样式表
和应用程序,使您能够根据需要显示和处理数据。 XML 是
为在 Web 上传送而进行优化了的 SGML 的子集。它是由万
维网联合会 (W3C) 定义的。该标准化确保了结构化数据的
统一性和相对于应用或供应商的独立性。
下面是一段XML文档:
<?xml version="1.0" encoding="utf-8"?>
<Products>
<Product>
<Name>冰箱</Name>
<Price>4000</Price>
<Maker>新飞</Maker>
</Product>
<Product>
<Name>洗衣机</Name>
<Price>1500</Price>
<Maker>海尔</Maker>
</Product>
<Product>
<Name>电脑</Name>
<Price>5000</Price>
<Maker>联想</Maker>
</Product>
</Products>
这是一个典型的XML文档,编辑好后可以保存为一个
以.xml为后缀的文件Products.xml。
我们可以将此文档分为文档序言 (Prolog) 和文档主体
两大部分。可以看到,XML文件是相当简单的。同
HTML一样,XML文件也是由一系列的标记组成,
不过,XML文件中的标记是自定义的标记,具有明
确的含义,我们可以对标记中的内容的含义作出说
明。
此文件的第一行即是文档序言。该行是一个 XML文
档必须要声明的东西,而且也必须位于XML 文档
的第一行。在这里它声明了XML文档遵循的版本
和使用的编码。在文档序言部分还可以有一些别
的声明。
文档的其余部分都属于文档主体,XML文档的内容
信息存放在此。可以看到,文档主体是由开始的
<Products>和结束的</ Products >控制标记组成,
这个称为XML文档的“根元素”。<Product>是作
为直属于根元素下的“子元素”,在<product>下
又有<Name>、<Price>、 <Maker>这些子元素,
而信息就由这些元素组织起来。
6.9.2 引用已有代码
为了在新解决方案中引用已有项目代码,可以先建立
一个新的空白解决方案,然后把以前创建好的项目
加进来即可。
建立新的空白解决方案的方法是先在“文件”菜单中
选择“新建”中的“项目”,打开“新建项目”对
话框,选择“项目类型”为“其他项目类型”并将
其展开,选中“Visual Studio 解决方案” 展开项,
在相应的“模板”中已自动选中“空白解决方案”,
单击“确定”按钮。
然后在“文件”菜单中选择“添加”,再选
“现有项目”,在弹出的“添加现有项目”
对话框中找到已经创建好的项目所在的文
件夹,然后选择相应的项目文件,单击
“打开”按钮,已有的项目就被添加到新
解决方案中了。然后在“视图”菜单中选
择“解决方案资源管理器”,在打开的
“解决方案资源管理器”中可以看到已有
项目。添加已存在的项目时,项目本身并
没有被拷贝到新解决方案所在的文件夹中。
具体用法见例6.9 为产品信息编辑程序加
上XML支持。
按下F5键运行程序,出现的窗体如图6.27所示。
在产品名文本框中输入“影碟机”,在价格文
本框中输入“400”,在生产商文本框中输入
“先锋”,单击窗体上的“添加”按钮,数
据将加到左侧列表框中,如图6.28所示。
图6.27程序运行结果
图6.28添加产品数据