版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
教案教师班级科目开课时间地点课题名称项目十七制作XML通讯录课时数12背景分析学生已有.NET知识,了解了类和对象、窗体控件、图形图像,需要XML有更深层次地掌握。学习目标设定 学习者通过编写XML文件,了解到XML文件的特色;在类文件的编写过程中,掌握了基本的类的属性的设计方法;在界面设计中,学会了使用DataGridView控件和BindingNavigator控件如何和数据源完成绑定;最后使用XmlReader类和XmlWriter类完成了对XML文件中关于学生通讯录部分内容的读取和写入。通过本项目,学生能学会用G使用XmlReader类和XmlWriter类完成了对XML文件的读取和写入,从而掌握对XML文件的使用。学习任务描述制作XML通讯录主要有五个任务:设计关于学生通讯录项目的XML文件结合本项目的要求设计Student类绘制通讯录窗体界面在窗体中显示XML文件内容,将修改过后的信息保存至XML文件教学情境创设随着Internet的不断发展,网络数据的传输日趋重要,本地数据存储日趋复杂,一种面向对象的数据存储文件随之产生,它就是XML。小顾决定用C#代码来制作访问XML文件的通讯录。教学资源准备建议配置:2.2GHz或速度更快的CPU、1GB或更大容量的RAM、1280x1024显示器、7200RPM或更高转速的硬盘;操作系统:Windows7或以上;开发软件:VisualStudio2012中文版(含MSDN);提供制作XML通讯录的画面作为参照。教学过程实施内容方法任务一设计关于学生通讯录项目的XML文件【任务描述】(该任务的内容和目的)结合XML文件的编写格式,设计学生通讯录文件XMLsTXL.xml。【任务实施】(完成此任务所需要的主要步骤)新建一个Windows项目,在模板中选择“Windows应用程序”,将项目名称设为“TXL”,位置设为“D:\XML\Example”(或其它位置),如图12-2所示。图12-2新建项目设置界面为项目添加一个新项“XML文件”,取名为XMLsTXL.xml,如图12-3所示。图12-3添加新项设置界面在此文件中,按格式要求,输入如下通讯录信息。<?xmlversion="1.0"encoding="utf-8"?><TXLName="学生通讯录"><Student><Name>张三</Name><Age>21</Age><Sex>男</Sex><TelNo>lt;/TelNo><QQ>5435455</QQ></Student><Student><Name>李四</Name><Age>20</Age><Sex>女</Sex><TelNo>lt;/TelNo><QQ>123647854</QQ></Student><Student><Name>华平</Name><Age>20</Age><Sex>女</Sex><TelNo>lt;/TelNo><QQ>857895435</QQ></Student><Student><Name>强晴晴</Name><Age>19</Age><Sex>女</Sex><TelNo>lt;/TelNo><QQ>7485369523</QQ></Student></TXL>提示提示/备注XML文件同样可以按要求在“记事本”中书写,注意保存时,将“编码”设置为“UTF-8”,即可。【理论知识】(对此任务所涉及到的关键知识点的讲解)一、XML概述1.XML文档XML(ExtensibleMarkupLanguage,可扩展标记语言)是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。XML也是元标记语言,即定义了用于定于其他与特定领域有关的、语义的、结构化的标记语言的句法语言,简单来说是一种数据描述语言。HTML(HypertextMarkupLanguage,超文本标识语言)或格式化的程序语言,只是定义一套固定的标记,用来描述一定数目的元素,如果标记语言中没有多需的标记,用户也没有办法了。XML解决了这个缺陷,它是一种元标记语言。XML与HTML的主要区别如下:XML用来描述数据,而HTML用来显示数据。XML中的标签是未预定义的,在使用时需要自定义,而HTML里的标签是预定义的。在具体的应用程序中,XML要以XML文档的形式应用,其后缀为.xml,包含在System.Xml命名空间中。2.XML元素XML元素用于封装数据,是XML文档的基本单位,它由元素的名称和属性值组成。XML元素的基本结构由开始标记、数据内容和结束标记组成,因此通常XML元素表示从该元素的开始标记到结束标记之间的部分内容。XML元素的命名规则如下:元素的名称可以包含字母、数字和其他字符,但不能包含空格和“:”。元素的名称要以字母或下划线开头。元素的名称不能以数字、标点符号和XML(或xml、Xml、xMl等)开头。注:XML元素的字母是区分大小写的,而且元素的嵌套必须规整严格。3.XML属性XML属性用于描述数据的详细信息,属性之中只能包含简单数据类型。通常应该将要存储的大量数据放置于元素的内容中,将元素不同的特性数据以及非必须显示的资料放置在元素的属性中。4.XML文档结构XML文档由DTD和XML文本组成,所谓DTD(DocumentTypeDefinitions,文档类型定义),简单来说就是一组标签的语法规则,类似于数据库表,表明XML文本的组成形式。声明XML文档的声明负责为XML文档匹配合适的解析器,其语法格式为:<?xmlversion=""standalone=""encoding=""?>其中各元素的含义如下:<?和?>:表示处理指令的开始和结束。Version:所使用的XML版本,默认为1.0。Standalone:表示是否使用外部声明DTD,值为no或yes。Encoding:字符编码,通常值为UTF-8、UTF-16、GB2312或GBK。根元素一个文档中只有一个根元素,其语法格式如下:<?xmlversion="1.0"encoding="UTF-8"?><根元素名称>根元素内容</根元素名称>XML代码XML的代码主要由元素和属性构成,创建时需要注意满足元素和属性各自的命名规范。注释注释的语法形式如下:<!--注释内容-->需要注意如下事项:注释文本中不能包含“-->”和“--”字符。注释不能放在标签“<>”中。注释不能放在元素声明中,也不能放在XML声明之前。实体引用在XML中,一些字符拥有特殊的含义。如果把字符“<”放在XML元素中,会放在错误,这是因为解析器会把它当作新元素的开始。例如:<Name>张三</Name>PCDATAPCDATA(ParsedCharacterData)即被解析的字符数据,可把字符数据视为XML元素的开始标签与结束标签之间的文本。PCDATA是会被解析器解析的文本。CDATACDATA(CharacterData)即字符数据,是不会被解析器解析的文本,类似于C#中的@符号。处理指令处理指令以“<?”开始,以“?>”结束。紧跟在“<?”之后的是一个目标应用程序,然后是指令实际内容。【知识拓展】(可选,可以放在任何位置)请按F1键,查一下MSDN上关于XML文档的信息,将与其相关的详细内容记下来。任务二结合本项目的要求设计Student类【任务描述】(该任务的内容和目的)为了便于将每个通讯录中的学生信息读取和存储,在此结合XML文档中所涉及到的项设计一个Student类。【任务实施】(完成此任务所需要的主要步骤)为项目添加一个新项“类”,取名为StudentTXL.cs。结合XML文档设计Student类,具体实现如下所示。完成后重新生成解决方案。namespaceTXL{publicclassStudent{publicstringName{get;set;}publicintAge{get;set;}publicstringSex{get;set;}publicstringTelNo{get;set;}publicstringQQ{get;set;}}}提示提示/备注Student类中的各个属性的类型,可以根据实际情况自己设置,当然,随后的程序设计调用时,也将会随之变化。任务三绘制窗体界面【任务描述】(该任务的内容和目的)设计窗体界面,如图12-4所示,使用DataGridView控件和BindingNavigator控件绑定到XML中的数据。图12-4“制作XML通讯录”运行界面【任务实施】(完成此任务所需要的主要步骤)打开Form1窗体,在窗体中添加DataGridView控件和BindingNavigator控件,调整窗体和控件的合适位置和大小。设置该窗体属性,如表12-1所示。属性取值/说明NameFrmMain/窗体类名称Text制作XML通讯录/窗口标题表12-1窗体属性为DataGridView控件选中数据源。选中“DataGridView”控件,单击“DataGridView任务”按钮,在弹出的“DataGridView任务”面板,单击“选择数据源”的下拉按钮,如图12-5所示,图12-5“DataGridView任务”面板操作窗口单击打开“添加项目数据源”,进入“数据源配置向导”操作界面,选中“对象”,如图12-6所示,单击“下一步”,将“Student”选为绑定的对象,如图12-7所示,单击“完成”即可。图12-6“数据源配置向导”之“选择数据源类型”窗口图12-7“数据源配置向导”之“选择希望绑定到的对象”窗口设置BindingNavigator控件的“BandingSource”属性为“studentBindingSource”。此时,调整窗体和“DataGridView”控件的大小,显示界面,如图12-8所示。图12-8“制作XML通讯录”设计界面【理论知识】(对此任务所涉及到的关键知识点的讲解)一、数据控件1.DataGridView控件在.NET类库中,DataGridView控件提供一种强大而灵活的以表格形式显示数据的方式。可以使用DataGridView控件显示少量数据的只读视图,也可以对其进行缩放以显示特大数据集的可编辑视图。DataGridView控件除了显示和管理数据外,还可以以简单表格形式管理本地内存或文件种的数据。另外,DataGridView控件还提供很多属性管理控件的使用,例如,可以设置它的背景色、前景色、字体,还可以分别设置列标题和行标题的样式,也可以设置是否记录可以编辑等。DataGridView控件的功能十分强大,有兴趣的读者可以查阅MSDN或相关书籍,进一步学习它的高级功能。2.BindingNavigator控件绑定数据源后,可以实现数据导航和编辑。默认状态下,添加一个BindingNavigator控件后显示在窗体的顶部,可以通过修改Dock属性,调整其位置。【知识拓展】(可选,可以放在任何位置)请按F1键,查一下MSDN上的DataGridView控件和BindingNavigator控件的信息,将这两个控件的更多的使用方法的详细内容记下来。任务四用XmlReader读取XML文件【任务描述】(该任务的内容和目的)当窗体运行时,使用XmlReader类读取XML文件中关于学生通讯录中的信息,显示在DataGridView控件中。【任务实施】(完成此任务所需要的主要步骤)在使用XML文件操作之前,先添加引用命名空间:usingSystem.Xml;编写窗体加载时的程序代码:privatevoidFrmMain_Load(objectsender,EventArgse){Studentstutxl=newStudent();List<Student>newTXLList=newList<Student>();//打开XML文件XmlReaderxr=XmlReader.Create(@"D:\XML\Example\TXL\TXL\XMLsTXL.xml");//直到文件结束while(!xr.EOF){//读取下一个节点xr.Read();//如果是一个元素开始,则根据元素名称判断具体操作if(xr.NodeType==XmlNodeType.Element){switch(xr.Name){case"Student"://如果是Student,则创建一个Student对象stutxl=newStudent();break;case"Name"://如果是Name,则读取学生姓名xr.ReadStartElement("Name");stutxl.Name=xr.Value;break;case"Age"://如果是Age,则作为int类型读取xr.ReadStartElement("Age");stutxl.Age=xr.ReadContentAsInt();break;case"Sex"://如果是Sex,则作为string类型读取xr.ReadStartElement("Sex");stutxl.Sex=xr.ReadContentAsString();break;case"TelNo"://如果是TelNo,以字符串形式读取xr.ReadStartElement("TelNo");stutxl.TelNo=xr.ReadString();break;case"QQ"://如果是QQ,以字符串形式读取xr.ReadStartElement("QQ");stutxl.QQ=xr.ReadString();break;default:break;}}elseif(xr.NodeType==XmlNodeType.EndElement){//如果是一个Student节点结束,将学生信息添加到列表中if(xr.Name=="Student")newTXLList.Add(stutxl);}}//操作完成,关闭XML文件xr.Close();//更新数据绑定this.studentBindingSource.DataSource=newTXLList;}运行结果如图12-9所示。图12-9运行结果【理论知识】(对此任务所涉及到的关键知识点的讲解)一、System.Xml命名空间在.NET类库中对XML文件的访问提供了强大的支持,与XML访问相关的类被封装在System.Xml命名空间下,它根据功能被细分成System.Xml.Schema、System.Xml.Serialization、System.Xml.Xpath和System.Xml.Xsl4个子命名空间。可以通过.NET类库提供的以下几个类完成XML文件中数据的存取。XmlElement:表示XML文档中的一个元素,如,<Name>张三</Name>。XmlText:表示XML文档中的文本,如,<Sex>女</Sex>中的文本“女”。XmlDeclaration:表示XML文档中的声明节点,格式为“<?xmlversion="1.0"……?>”XmlDocument:表示XML文档,在内存中以树状形式保存XML文档中的数据。XmlComment:表示XML文档中的一段注释,格式为“<--注释文本-->”XmlNode:表示XML文档中的一个节点。XmlNodeType:枚举类型,表示XmlNode的具体类型。如开始元素、元素结束、属性、文本、空白等。XmlReader:表示一个读取器,它以一种快速、非缓存和只进的方式读取包含XML数据的流或文件。XmlWriter:表示一个编写器,它以一种快速、非缓存和只进的方式生成包含XML数据的流或文件。ReadState:表示读取器的读取状态。WriteState:表示编写器的写入状态。二、XmlReader类:XmlReader类每次读取操作都会将当前节点向后移,直到数据结束,再通过它的成员属性和成员函数来获取当前节点的类型和数据等信息。XmlReader对象的常用属性和方法如表12-2和表12-3所示。名称说明AttributeCount当在派生类中被重写时,获取当前节点上的属性数。Depth当在派生类中被重写时,获取XML文档中当前节点的深度。EOF当在派生类中被重写时,获取一个值,该值指示此读取器是否定位在流的结尾。HasAttributes获取一个值,该值指示当前节点是否有任何属性。HasValue当在派生类中被重写时,获取一个值,该值指示当前节点是否可以具有Value。IsDefault当在派生类中被重写时,获取一个值,该值指示当前节点是否是从DTD或架构中定义的默认值生成的属性。IsEmptyElement当在派生类中被重写时,获取一个值,该值指示当前节点是否为空元素(例如<MyElement/>)。Name当在派生类中被重写时,获取当前节点的限定名。NodeType当在派生类中被重写时,获取当前节点的类型。ReadState当在派生类中被重写时,获取读取器的状态。SchemaInfo获取作为架构验证结果分配给当前节点的架构信息。Settings获取用于创建此XmlReader实例的XmlReaderSettings对象。Value当在派生类中被重写时,获取当前节点的文本值。表12-2XmlReader对象的常用属性名称说明Create已重载。创建一个新的XmlReader实例。IsStartElement已重载。测试当前内容节点是否是开始标记。MoveToContent检查当前节点是否是内容(非空白文本、CDATA、Element、EndElement、EntityReference或EndEntity)节点。如果此节点不是内容节点,则读取器向前跳至下一个内容节点或文件结尾。它跳过以下类型的节点:ProcessingInstruction、DocumentType、Comment、Whitespace或SignificantWhitespace。MoveToElement当在派生类中被重写时,移动到包含当前属性节点的元素。Read当在派生类中被重写时,从流中读取下一个节点。ReadAttributeValue当在派生类中被重写时,将属性值解析为一个或多个Text、EntityReference或EndEntity节点。ReadContentAs将内容作为指定类型的对象读取。ReadContentAsBoolean将当前位置的文本内容作为Boolean读取。ReadContentAsDateTime将当前位置的文本内容作为DateTime对象读取。ReadContentAsDouble将当前位置的文本内容作为双精度浮点数读取。ReadContentAsFloat将当前位置的文本内容作为单精度浮点数读取。ReadContentAsInt将当前位置的文本内容作为32位有符号整数读取。ReadContentAsString将当前位置的文本内容作为String对象读取。ReadEndElement检查当前内容节点是否为结束标记并将读取器推进到下一个节点。ReadStartElement已重载。检查当前节点是否为元素并将读取器推进到下一个节点。ReadString当在派生类中被重写时,将元素或文本节点的内容当做字符串读取。Skip跳过当前节点的子级。表12-3XmlReader对象的方法【知识拓展】(可选,可以放在任何位置)请按F1键,查一下MSDN上的XmlReader成员和XmlReader类的信息,将其详细内容记下来。任务五用XmlWriter写入XML文件【任务描述】(该任务的内容和目的)当用户完成对窗体中的学生通讯录信息增加、删除、修改操作后,单击“保存”按钮和关闭窗体时,能将数据写入到XML文件中。【任务实施】(完成此任务所需要的主要步骤)在窗体中添加一个Button按钮,属性设置如下表12-4。属性取值/说明NamebtnSave/按钮类名称Text保存信息到XML文件/按钮上显示的文本表12-4Button按钮的属性设置编写btnSave按钮的Click事件,完成将dataGridView中的信息写入到XML文件中。privatevoidbtnSave_Click(objectsender,EventArgse){List<Student>newTXLList=newList<Student>();//逐行将DataGaidView中的数据写入到newTXLList中for(inti=0;i<dataGridView1.Rows.Count-1;i++){Studentstutxl=newStudent();stutxl.Name=dataGridView1.Rows[i].Cells[0].Value.ToString();stutxl.Age=Convert.ToInt32(dataGridView1.Rows[i].Cells[1].Value.ToString());stutxl.Sex=dataGridView1.Rows[i].Cells[2].Value.ToString();stutxl.TelNo=dataGridView1.Rows[i].Cells[3].Value.ToString();stutxl.QQ=dataGridView1.Rows[i].Cells[4].Value.ToString();newTXLList.Add(stutxl);}//打开文件XmlWriterxw=XmlWriter.Create(@"D:\XML\Example\TXL\TXL\XMLsTXL.xml");//写入开始标记<?xml……?>xw.WriteStartDocument();//换行,写入通讯录节点的头部和属性<TXLName="学生通讯录">xw.WriteWhitespace(Environment.NewLine);xw.WriteStartElement("TXL");xw.WriteAttributeString("Name","学生通讯录");//依次读出newTXLList中的数据项foreach(StudentstuinnewTXLList){//写入学生节点的头部<Student>xw.WriteWhitespace(Environment.NewLine);xw.WriteStartElement("Student");//写入姓名节点<Name>XXX</Name>xw.WriteWhitespace(Environment.NewLine);xw.WriteStartElement("Name");xw.WriteValue(stu.Name);xw.WriteEndElement();//写入年龄节点<Age>XXX</Age>xw.WriteWhitespace(Environment.NewLine);xw.WriteStartElement("Age");xw.WriteValue(stu.Age);xw.WriteEndElement();//写入性别节点<Sex>XXX</Sex>xw.WriteWhitespace(Environment.NewLine);xw.WriteStartElement("Sex");xw.WriteValue(stu.Sex);xw.WriteEndElement();//写入联系电话节点<TelNo>XXX</TelNo>xw.WriteWhitespace(Environment.NewLine);xw.WriteStartElement("TelNo");xw.WriteValue(stu.TelNo);xw.WriteEndElement();//写入QQ节点<QQ>XXX</QQ>xw.WriteWhitespace(Environment.NewLine);xw.WriteStartElement("QQ");xw.WriteValue(stu.QQ);xw.WriteEndElement();//写入学生节点的尾部</Student>xw.WriteWhitespace(Environment.NewLine);xw.WriteEndElement();}//写入通讯录节点的尾部</TXL>xw.WriteWhitespace(Environment.NewLine);xw.WriteEndElement();//操作完成,关闭文件xw.Close();MessageBox.Show("XML文件保存成功!");}在FrmMain窗体的FromClosing事件中添加代码,完成关闭窗体时,同样可以将信息写入到XML文件中。privatevoidFrmMain_FormClosing(objectsender,FormClosingEventArgse){btnSave_Click(null,null);}运行结果如图12-10所示为窗体加载界面,可以单击导航按钮,进行对信息的逐条查看,同时也可以增加学生信息,如图12-11所示,删除学生信息,如图12-12所示,以及修改学生信息,完成操作后,单击窗体中的按钮或关闭窗体时都可以保存文件信息到指定的XML文件中,并出现相应的对话框提示,如图12-13所示。图12-10运行结果-窗体加载界面图12-11运行结果-添加信息界面图12-12运行结果-删除信息后界面图12-13运行结果-单击保存或关闭窗体时出现的“保存成功”对话框提示提示/备注保存的功能同样可在bindingNavigator控件中添加保存按钮,来实现其功能。【理论知识】(对此任务所涉及到的关键知识点的讲解)一、XmlWriter类:XmlWriter类提供一种快速、非缓存和只进的方式来生成包含XML数据的流或文件。可以用于构建符合W3C可扩展标记语言建议和XML总的命名空间建议的XML文档。XmlWriter对象的常用方法如表12-5所示。名称说明Create已重载。创建一个新的XmlWriter实例。WriteAttributes当在派生类中被重写时,写出在XmlReader中当前位置找到的所有属性。WriteAttributeString已重载。当在派生类中被重写时,写出具有指定值的属性。WriteCData当在派生类中被重写时,写出包含指定文本的<![CDATA[...]]>块。WriteChars当在派生类中被重写时,以每次一个缓冲区的方式写入文本。WriteComment当在派生类中被重写时,写出包含指定文本的注释<!--...-->。WriteDocType当在派生类中被重写时,写出具有指定名称和可选属性的DOCT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理教育中的学生支持服务
- 医院感染预防的绩效评估
- 护理礼仪与特殊患者护理
- 护理课件制作工具使用指南
- 护理风险:持续质量改进动力
- 护理带教中的沟通艺术
- 呼吸衰竭的护理科研思路
- 零售业商品管理经理面试要点
- 旅游景点规划与开发实务
- 零售业实体店长应掌握的店铺管理技能及培训要点
- 《公路桥涵施工技术规范》JTGT3650-2020
- GB/T 2039-2024金属材料单轴拉伸蠕变试验方法
- 2024年芜湖职业技术学院单招职业适应性测试试题库 附答案(精练)
- 2024届高考英语一轮复习2023全国乙卷词汇短语积累 长难句分析 课件
- 手术室利用PDCA循环降低手术室病理标本管理缺陷发生率品管圈QCC成果汇报
- 健康体检主检报告的内涵
- 第四章-古印度与古代美洲的城市教材课件
- 新生儿锁骨骨折的原因分析及对策
- 脉冲整流器主电路及其控制(由于公式编辑器版本问题不能保存为PPT格式)课件
- GB/T 13462-2008电力变压器经济运行
- GB 7912-2010食品安全国家标准食品添加剂栀子黄
评论
0/150
提交评论