读写一般格式的XML文件

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

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

 1<ge name="电压表"> 图元的名称 
 2
 3<gee> 一个图素数据的开始 
 4
 5<flagorder>DrawLine</flagorder>
 6<x>67</x>
 7<y>23</y>
 8<x1>37</x1>
 9<y1>77</y1>
10<lw>1</lw>
11<r>0</r>
12<g>0</g>
13<b>0</b>
14</gee> 一个图素数据的结束 
15
16<gee>
17<flagorder>DrawRectangle</flagorder>
18<x>85</x>
19<y>76</y>
20<x1>30</x1>
21<y1>36</y1>
22<lw>1</lw>
23<r>0</r>
24<g>0</g>
25<b>0</b>
26</gee>
27<gee>
28<flagorder>DrawEllipse</flagorder>
29<x>30</x>
30<y>7</y>
31<x1>70</x1>
32<y1>46</y1>
33<lw>1</lw>
34<r>0</r>
35<g>0</g>
36<b>0</b>
37</gee>
38</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"))

{

<span style="mso-tab-c

Published At
Categories with Web编程
Tagged with
comments powered by Disqus