读写一般格式的XML文件


所属类别:.NET

文章作者:未知

特别推荐:免费发布信息 承包关键词~~抢爆了!HOT!


把数据都一次性存入数据库固然好,但是设想如果用户运行系统的计算机没有接入网络,即根本建立不了与数据库的连接,那该怎么办?总不能不要数据了任由其丢失吧。于是此时本地数据文件变的尤为重要,她们成为承载数据的媒介。不过选择存储数据的文件格式需要仔细周全的考虑,在存储和读取数据文件的过程中,不同的文件格式会给程序的性能带来不同的影响。XML(extensible markup language)文件作为与数据库联系最紧密的文件格式日益受到程序员的青睐,让我们看看它的优点:【1】 当被用来描述数据库时,XML 拥有两项凌驾于专有格式(如Access .mdb 或dBase .dbf 格式)的优点:XML 是人类易读的,而且它是根据众所周知、开放式的标准所建立的。【2】 XML描述数据本身。由于数据显示与内容分开,XML定义的数据允许指定不同的显示方式,使数据更合理地表现出来。本地的数据能够以客户配置、使用者选择或其他标准决定的方式动态地表现出来。【3】 XML具有较好的保值性。XML的保值性来自它的先驱之一——SGML语言。SGML是一套有着十几年历史的国际标准,它最初设计的一大目标就是要为文件提供50年以上的寿命。而且从XML文件向数据库里导入数据并不是一件难事,所以选取XML文件做为数据的承载是非常好的选择。(XML的读取实例)XML遵循严格的语法要求,例如一个XML文件格式如下: 图元的名称 一个图素数据的开始 DrawLine 67 23 37 77 1 0 0 0 一个图素数据的结束 DrawRectangle 85 76 30 36 1 0 0 0 DrawEllipse 30 7 70 46 1 0 0 0 (写这个实例XML文件的代码:) for(int i=0;i< GEList2D.Count;i++)//将某一个图元中的图素数据依次写入XML文件 { GEObj = (CGE)GEList2D[i]; //对图元中的图素数据进行等比例缩小比例是4:1 GEObj.ptDrawStart.X = GEObj.ptDrawStart.X/4; GEObj.ptDrawStart.Y = GEObj.ptDrawStart.Y/4; GEObj.ptDrawEnd.X = GEObj.ptDrawEnd.X/4; GEObj.ptDrawEnd.Y = GEObj.ptDrawEnd.Y/4; writer.WriteStartElement("gee"); writer.WriteElementString("flagOrder",GEObj.flagOrder.ToString()); writer.WriteElementString("X",GEObj.ptDrawStart.X.ToString()); writer.WriteElementString("Y",GEObj.ptDrawStart.Y.ToString()); writer.WriteElementString("X1",GEObj.ptDrawEnd.X.ToString()); writer.WriteElementString("Y1",GEObj.ptDrawEnd.Y.ToString()); writer.WriteElementString("lw",GEObj.GElw.ToString()); writer.WriteElementString("R",GEObj.R.ToString()); writer.WriteElementString("G",GEObj.R.ToString()); writer.WriteElementString("B",GEObj.R.ToString()); writer.WriteEndElement(); } writer.WriteEndElement();(写这个实例XML文件的代码:)while(xtr.Read()) { switch(xtr.NodeType) { case XmlNodeType.Element: { if(xtr.IsStartElement("ge")) { this.GEName[i] = xtr.GetAttribute("name").ToString();//获取图元名称 } if(xtr.IsStartElement("gee"))//开始读取一个图素 {} if(xtr.IsStartElement("flagOrder"))//flagOrder { switch(xtr.ReadElementString("flagOrder"))//根据不同的命令标志位建立不同的对象 { case "DrawLine": this.GEObj = new CLine(); this.GEObj.flagOrder = "DrawLine";//注意要在这里赋值 break; case "DrawRectangle": this.GEObj = new CRectangle(); this.GEObj.flagOrder = "DrawRectangle"; break; case "DrawEllipse": this.GEObj = new CEllipse(); this.GEObj.flagOrder = "DrawEllipse"; break; case "DrawArc": this.GEObj = new CArc(); this.GEObj.flagOrder = "DrawArc"; break; } //////////////////////////////////////////////////////////////////////////// } if(xtr.IsStartElement("X"))//ptDrawStart.X { this.GEObj.ptDrawStart.X = Int32.Parse(xtr.ReadElementString("X").ToString()); } if(xtr.IsStartElement("Y"))//ptDrawStart.Y { this.GEObj.ptDrawStart.Y = Int32.Parse(xtr.ReadElementString("Y").ToString()); } if(xtr.IsStartElement("X1"))//ptDrawEnd.X { this.GEObj.ptDrawEnd.X = Int32.Parse(xtr.ReadElementString("X1").ToString()); } if(xtr.IsStartElement("Y1"))//ptDrawEnd.Y { this.GEObj.ptDrawEnd.Y = Int32.Parse(xtr.ReadElementString("Y1").ToString()); } if(xtr.IsStartElement("lw"))//lw { this.GEObj.GElw = Int32.Parse(xtr.ReadElementString("lw").ToString()); } if(xtr.IsStartElement("R"))//R { this.GEObj.R = Int32.Parse(xtr.ReadElementString("R").ToString()); } if(xtr.IsStartElement("G"))//G { this.GEObj.G = Int32.Parse(xtr.ReadElementString("G").ToString()); } if(xtr.IsStartElement("B"))//B { this.GEObj.B = Int32.Parse(xtr.ReadElementString("B").ToString()); } break; } case XmlNodeType.EndElement://读取该图素结束 { if(xtr.Name.ToString().Equals("gee")) { this.GEList2D.Add(GEObj);//一个图素完成 } break; } } } GEList1D.Add(GEList2D);//完成一个GEList2D,将之加入GEList1D,即读完一个图元文件 xtr.Close();//关键必须关闭,否则独占文件就写不进去 GEList2D = new ArrayList();//重新再为GEList2D分配一块区域} 关闭本页

相关信息

·  磁盘管理

·  XL2000: "Project Is Unviewable" Error Message When You Try to View Project

· VC中进行自绘菜单的实现

· VMware Workstation 6.5.1 Build 126130








....

55944 33319