王朝网络
分享
 
 
 

读写一般格式的XML文件

王朝other·作者佚名  2006-01-09
宽屏版  字体: |||超大  

把数据都一次性存入数据库固然好,但是设想如果用户运行系统的计算机没有接入网络,即根本建立不了与数据库的连接,那该怎么办?总不能不要数据了任由其丢失吧。于是此时本地数据文件变的尤为重要,她们成为承载数据的媒介。不过选择存储数据的文件格式需要仔细周全的考虑,在存储和读取数据文件的过程中,不同的文件格式会给程序的性能带来不同的影响。

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文件格式如下:

<ge name="电压表"> 图元的名称

<gee> 一个图素数据的开始

<flagOrder>DrawLine</flagOrder>

<X>67</X>

<Y>23</Y>

<X1>37</X1>

<Y1>77</Y1>

<lw>1</lw>

<R>0</R>

<G>0</G>

<B>0</B>

</gee> 一个图素数据的结束

<gee>

<flagOrder>DrawRectangle</flagOrder>

<X>85</X>

<Y>76</Y>

<X1>30</X1>

<Y1>36</Y1>

<lw>1</lw>

<R>0</R>

<G>0</G>

<B>0</B>

</gee>

<gee>

<flagOrder>DrawEllipse</flagOrder>

<X>30</X>

<Y>7</Y>

<X1>70</X1>

<Y1>46</Y1>

<lw>1</lw>

<R>0</R>

<G>0</G>

<B>0</B>

</gee>

</ge>

(写这个实例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分配一块区域

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有