• WPF 关于XDocument(xml) 的部分操作记录


    (1)删除xml文件中的一个结点的方法,有如下两种方式(只有存在数据绑定的情况下才会有第二种情况,否则一般是第一种情况);

    private void DeletePacsNode()
            {
                //从xml文件中删除根节点的子节点的方式(两种)
                //(1)直接获得所有的子节点,然后根据条件判断从里面移除
                //XmlDocument xmlDoc = new XmlDocument();
                //xmlDoc.Load(@"....DataPacsConfig.xml");
                //var root = xmlDoc.DocumentElement;                  //获取文档的根            
                //xmlDoc.Load(@"....DataPacsConfig.xml");
                //var nodes = xmlDoc.DocumentElement.ChildNodes;
                //foreach (var item in nodes)
                //{
                //    XmlNode temp = (XmlNode)item;
                //    if (temp["AETitle"].InnerText == SelectedPacsNode.AETitle)    //当该条件不唯一时,则需要把对应的能唯一确定该节点的判断条件均加上
                //        root.RemoveChild(temp);
                //}
                //xmlDoc.Save(@"....DataPacsConfig.xml");
                //(2)清空xml文件,并从绑定的数据集合中移除相应的元素,再将剩下的元素重新存入xml文件
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(@"....DataPacsConfig.xml");
                PacsNodeView.Remove(SelectedPacsNode);              //从绑定的数据集合中移除选择的元素
                //var element = xmlDoc.SelectSingleNode(SelectedPacsNode.AETitle);
                XmlNode root = xmlDoc.SelectSingleNode("PACS");                 //查找<PACS>   
                root.RemoveAll();                                   //清空xml,删除所有节点
                foreach (var item in PacsNodeView)
                {
                    XmlElement xe1 = xmlDoc.CreateElement("PacsNode");                  //创建一个<PacsNode>节点
                    XmlElement xesub1 = xmlDoc.CreateElement("AETitle");
                    xesub1.InnerText = item.AETitle;                            //设置文本节点
                    xe1.AppendChild(xesub1);                                                  //添加到<book>节点中
                    XmlElement xesub2 = xmlDoc.CreateElement("HostIP");
                    xesub2.InnerText = item.HostIP;
                    xe1.AppendChild(xesub2);
                    XmlElement xesub3 = xmlDoc.CreateElement("Port");
                    xesub3.InnerText = item.Port;
                    xe1.AppendChild(xesub3);
                    XmlElement xesub4 = xmlDoc.CreateElement("HostName");
                    xesub4.InnerText = item.HostName;
                    xe1.AppendChild(xesub4);
                    //root.RemoveChild(xe1);
                    root.AppendChild(xe1);
                }
                xmlDoc.Save(@"....DataPacsConfig.xml");
                this.LoadData();
            }

      加载数据的方法如下:

    //关于数据绑定部分的添加绑定数据集合内容的方法
    private void LoadData()
            {
                PacsNodeView.Clear();
                var TempData = GetAllNodes();
                foreach (var temp in TempData)
                {
                    PacsNode pNode = new PacsNode();
                    pNode.AETitle = temp.AETitle;
                    pNode.HostIP = temp.HostIP;
                    pNode.Port = temp.Port;
                    pNode.HostName = temp.HostName;
                    PacsNodeView.Add(pNode);
                }
            }

      从xml文件读取数据的方法如下:

    //从xml中获取所有节点的信息
    private List<PacsNode> GetAllNodes()
            {
                List<PacsNode> PacsNodes = new List<PacsNode>();
                string xmlFileName = @"....DataPacsConfig.xml";
                XDocument xDoc = XDocument.Load(xmlFileName);
                var Nodes = xDoc.Descendants("PacsNode");
                foreach (var n in Nodes)
                {
                    PacsNode pNode = new PacsNode();
                    var temp = n.Element("AETitle").Value;
                    pNode.AETitle = n.Element("AETitle").Value;
                    pNode.HostIP = n.Element("HostIP").Value;
                    pNode.Port = n.Element("Port").Value;
                    pNode.HostName = n.Element("HostName").Value;
                    PacsNodes.Add(pNode);
                }
                return PacsNodes;
            }

     (2)可参考的学习链接:http://blog.csdn.net/figerdeng/article/details/19031975

  • 相关阅读:
    Qt C++中的关键字explicit——防止隐式转换(也就是Java里的装箱),必须写清楚
    有栖川有栖《马来铁道之谜》读后感
    Qt多国语言QT_TR_NOOP和QT_TRANSLATE_NOOP
    Qt调用VC++生成的动态链接库
    QTabWidget添加自定义样式
    Qt跨线程信号和槽的连接(默认方式是直连和队列的折中)
    OO五大原则
    《Head First Python》学习笔记03 异常处理
    使用Qt实现MDI风格的主窗体
    Qt中文乱码问题(比较清楚,同一个二进制串被解释成不同的语言)
  • 原文地址:https://www.cnblogs.com/runningRain/p/5991533.html
Copyright © 2020-2023  润新知