【1】 当被用来描述数据库时,xml 拥有两项凌驾于专有格式(如access .mdb 或dbase .dbf 格式)的优点:xml 是人类易读的,而且它是根据众所周知、开放式的标准所建立的。
【3】 xml具有较好的保值性。xml的保值性来自它的先驱之一——sgml语言。sgml是一套有着十几年历史的国际标准,它最初设计的一大目标就是要为文件提供50年以上的寿命。
而且从xml文件向数据库里导入数据并不是一件难事,所以选取xml文件做为数据的承载是非常好的选择。
(xml的读取实例)
<ge name=”电压表”> 图元的名称
<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>
<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分配一块区域
}