FxCAD 实验四 将FxCAD中的对象保存到XML文件中

     在FxCAD开发文件中主要包括FxClassLibrary、FxController和FxDesignView三部分。其中FxClassLibrary的主要包含的是FxCAD中节点的绘制代码,连线的绘制代码,进行二次开发时添加的主要类代码,以及对所绘制图形的.xml文件的保存与打开的实现代码。

      .xml的简单介绍: XML 即可扩展标记语言(Extensible Markup Language),是一种平台无关的表示数据的方法。简单地说,使用 XML 创建的数据可以被任何应用程序在任何平台上读取。甚至可以通过手动编码来编辑和创建 XML 文档。其原因是,XML 与 HTML 一样,都是建立在相同的基于标记技术基础之上。
      

       XML可以将信息串行化并作为文本存储,这样数据便可以在任何可能需要的环境中使用。所以最常见的XML应用就是存储我们系统中的配置信息。XML也可以说是用来描述信息,数据,甚至所有的对象的软件,我们所画的FxCAD图或者别的应用程序多是以文件的形式保存,然后在要用的时候又会将文件恢复成我们在保存之前所见到的样式。保存文件的形式有很多种,ASCII,UTF,XML等 ,他们都是以特定的形式保存,而且都有自己表述对象的规范性,XML也有自己描述的规范性,如成对出现等。

下面主要介绍.xml文件的保存与打开的实现

 

1.xml文件的保存

1)、根据Xml数据创建对象,他的主要代码如下:

XmlNode xmlFxDesign = root.SelectSingleNode("Design");

            XmlNode xmlFxLocation = root.SelectSingleNode("Location");

            XmlNode xmlFxBehavior = root.SelectSingleNode("Behavior");

            XmlNode xmlFxAppearance = root.SelectSingleNode("Appearance");

 

            FxDesign = new Design(xmlFxDesign);

            FxLocation = new Location(xmlFxLocation);

            FxBehavior = new Behavior(xmlFxBehavior);

            FxAppearance = new FxCAD.Core.LibraryModel.FxProperties.Appearance(xmlFxAppearance);

2)声明一个对象FxNodes并实例化,用于保存结点的数据,代码如下:

  XmlNode xmlFxNode = root.SelectSingleNode("FxNodes");

 

3)用一个foreach来实现对所要保存的对象,主要代码如下:

foreach (XmlNode nin xmlFxNode.ChildNodes)

            {

                Node node = new Node();

                node.ObjectInputXml(n, XmlObjectList);

                FxNodes.Add(node.FxDesign.ID, node);

            }

 

            this.Init();

            XmlObjectList.Add(FxDesign.ID, this);

 

 

2.XML文件的打开

1)实例化System.Text.StringBuilder,并添加该对象的对应方法,代码如下:

System.Text.StringBuilder sb =new System.Text.StringBuilder();

            sb.AppendLine("<LibObject Level=\"2\" ClassID=\"" + FxDesign.ClassID +"\">");

            sb.AppendLine(FxDesign.GetPropertiesXml());

            sb.AppendLine(FxLocation.GetPropertiesXml());

            sb.AppendLine(FxBehavior.GetPropertiesXml());

            sb.AppendLine(FxAppearance.GetPropertiesXml());

            sb.AppendLine("<FxNodes Count=\"" + FxNodes.Count +"\">");

2)用foreach遍历来实现对。Xml文件的对象的相关属性的读取,并恢复到文件保存之前的样式。代码如下

            foreach (DictionaryEntry dein FxNodes)

            {

                Node n = (Node)de.Value;

                sb.AppendLine(n.ObjectOutputXml());

              

            }

            sb.AppendLine("</FxNodes>");

            sb.AppendLine("</LibObject>");

            return sb.ToString

 

 

 

 

附录

 

//FxCAD.xml文件保存实现的源代码

        public override void ObjectInputXml(XmlNode root,Hashtable XmlObjectList)

        {

            XmlNode xmlFxDesign = root.SelectSingleNode("Design");

            XmlNode xmlFxLocation = root.SelectSingleNode("Location");

            XmlNode xmlFxBehavior = root.SelectSingleNode("Behavior");

            XmlNode xmlFxAppearance = root.SelectSingleNode("Appearance");

 

            FxDesign = new Design(xmlFxDesign);

            FxLocation = new Location(xmlFxLocation);

            FxBehavior = new Behavior(xmlFxBehavior);

            FxAppearance = new FxCAD.Core.LibraryModel.FxProperties.Appearance(xmlFxAppearance);

 

            FxNodes = new Hashtable();

            XmlNode xmlFxNode = root.SelectSingleNode("FxNodes");

            foreach (XmlNode nin xmlFxNode.ChildNodes)

            {

                Node node = new Node();

                node.ObjectInputXml(n, XmlObjectList);

                FxNodes.Add(node.FxDesign.ID, node);

            }

            this.Init();

            XmlObjectList.Add(FxDesign.ID, this);

        }

 

//FxCAD.xml文件打开实现的源代码

        public override string ObjectOutputXml()

        {

            //return base.ObjectOutputXml();

            System.Text.StringBuilder sb =new System.Text.StringBuilder();

            sb.AppendLine("<LibObject Level=\"2\" ClassID=\"" + FxDesign.ClassID +"\">");

            sb.AppendLine(FxDesign.GetPropertiesXml());

            sb.AppendLine(FxLocation.GetPropertiesXml());

            sb.AppendLine(FxBehavior.GetPropertiesXml());

            sb.AppendLine(FxAppearance.GetPropertiesXml());

            sb.AppendLine("<FxNodes Count=\"" + FxNodes.Count +"\">");

            foreach (DictionaryEntry dein FxNodes)

            {

                Node n = (Node)de.Value;

                sb.AppendLine(n.ObjectOutputXml());

            }

            sb.AppendLine("</FxNodes>");

            sb.AppendLine("</LibObject>");

            return sb.ToString();

        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值