예제 #1
0
        /// <summary>
        /// 将 KepwareServer 信息持久化
        /// </summary>
        /// <param name="type">编辑类别:1-保存;2-删除</param>
        /// <param name="server">KepwareServer对象</param>
        /// <param name="dataFileName">本地持久化文件名</param>
        public void ModifyDataFile(int type, TIRAPOPCServer server, string dataFileName)
        {
            XmlDocument xml      = new XmlDocument();
            XmlNode     rootNode = null;

            if (!File.Exists(dataFileName))
            {
                xml.AppendChild(xml.CreateXmlDeclaration("1.0", "utf-8", ""));
                rootNode = xml.CreateElement("root");
                xml.AppendChild(rootNode);
            }
            else
            {
                try
                {
                    xml.Load(dataFileName);
                }
                catch (Exception error)
                {
                    Debug.WriteLine(string.Format("加载[{0}]文件时出错:[{1}]", dataFileName, error.Message));
                    return;
                }

                rootNode = xml.SelectSingleNode("root");
                if (rootNode == null)
                {
                    Debug.WriteLine(
                        string.Format(
                            "[{0}] 文件中不存在 root 根节点"));
                    return;
                }
            }

            // 在第一层子节点中查找 Device 节点,若没有找到则创建该节点
            XmlNode serversNode = null;

            foreach (XmlNode node in rootNode.ChildNodes)
            {
                if (node.Name == "OPCServers")
                {
                    serversNode = node;
                    break;
                }
            }
            if (serversNode == null)
            {
                serversNode = xml.CreateElement("OPCServers");
                rootNode.AppendChild(serversNode);
            }

            // 在 OPCServers 节点中查找指定 Address 的 OPCServer 子节点,如果找到则从 Devices 节点中删除
            XmlNode serverNode =
                IRAPXMLUtils.GetChildNodeWithPropertyValue(
                    serversNode,
                    server);

            if (serverNode != null)
            {
                serversNode.RemoveChild(serverNode);
            }

            if (type == 1)
            {
                #region 添加设备节点
                serverNode = xml.ImportNode(server.GenerateXMLNode(), true);
                serversNode.AppendChild(serverNode);
                #endregion
            }

            // 保存 XML 到文件
            xml.Save(dataFileName);
        }