zoukankan      html  css  js  c++  java
  • C# Winform --xml文件

    背景:

    在工作中,学习和使用OPC Server/Client系统时,发现开发的设计结构是把设备PLC的TAGLIST写为XML文件,在程序启动的时候载入从而完成自动配置。

    从而开始了C# ASP.NET中的XML文件的相关学习。

    学习笔记:

    1>简述:

    XML是可扩展标记语言 ,使用元素和属性来描述数据。

    c#使用XML好处:
    A.其实就是为程序交互提供的一种通用的数据格式,无论用什么语言编写的程序都可以通过XML交换数据,意味着C#对象可以和一个JAVA对象通讯;

    B.可作为一种存储数据的手段,相当于一个小的数据源,作为配置文件用,比.INI优秀并易用。格式固定,修改方便。
    2>xml常用操作:

    //命名空间

    using System.Xml;

    //初始化一个xml实例

    XmlDocument xml=new XmlDocument();

    //导入指定xml文件xml.Load(path);

    xmlDoc.Load(AppDomain.CurrentDomain.BaseDirectory + "\" + XMLfile);

    //指定一个节点

    XmlNode root=xml.SelectSingleNode("/root");

    //获取节点下所有直接子节点

    XmlNodeList childlist=root.ChildNodes;

    //判断该节点下是否有子节点

    root.HasChildNodes;

    //获取同名同级节点集合

    XmlNodeList nodelist=xml.SelectNodes("/Root/News");

    //生成一个新节点

    XmlElement node=xml.CreateElement("News");

    //将节点加到指定节点下,作为其子节点

    root.AppendChild(node);

    //将节点加到指定节点下某个子节点前

    root.InsertBefore(node,root.ChildeNodes[i]);

    //为指定节点的新建属性并赋值

    node.SetAttribute("id","11111");

    //为指定节点添加子节点

    root.AppendChild(node);

    //获取指定节点的指定属性值

    string id=node.Attributes["id"].Value;

    //获取指定节点中的文本

    string content=node.InnerText;

    //保存XML文件

    xml.Save(path);

    3>如何从winform写入数据到XML文件

    个人总结为动态写入和静态写入,可以直接在程序中hard-coding XML元素的各节点,也可以从TEXT获取写入,

    还可以从数据库(opc S/C系统是从OPC SERVER读取TAGLIST到DATASET再存数XML)读取到DATASET然后再写入XML文件。

    下面练习代码属于第二种:

     

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Xml;
    using System.IO;//FileStream
    
    namespace WinForm_CreateXML
    {
        public partial class Form1 : Form
        {
    
            private string XMLfile;
    
            XmlDocument xmlDoc = new XmlDocument();
    
            public XmlNode root;
    
    
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                XMLfile = "Test.xml";
                //创建XML文件
                CreateXML(XMLfile);
            }
    
            /// <summary>
            /// 创建XML文件的函数
            /// </summary>
            /// <param name="FileName"></param>
            public static void CreateXML(string FileName)
            {
                string DataPath = AppDomain.CurrentDomain.BaseDirectory;
                FileStream objFileStream = null;
                StreamWriter objStreamWriter = null;
                try
                {
                    //判断文件是否存在,如果存在就覆盖
                    if(File.Exists(DataPath+FileName))
                    {
                        return;
                    }
                    objFileStream =new FileStream(DataPath+FileName,FileMode.Append,FileAccess.Write);
                    objStreamWriter =new StreamWriter(objFileStream,Encoding.Default);
                    objStreamWriter.WriteLine("<?xml version="1.0" encoding="utf-8"?>");
                    objStreamWriter.WriteLine("<root>
    </root>");//将字符串写入到文件中
    
     
                }
                catch (Exception ex)
                {
    
                }
                finally
                {
                    if (objStreamWriter != null)
                    {
                        objStreamWriter.Flush();//清理缓冲区
                        objStreamWriter.Close();//关闭对象和基础流
     
                    }
    
                }
    
            }
    
            /// <summary>
            /// 添加节点xmlnode的函数
            /// </summary>
            public void addnode()
            {
                XmlNode WebSite = xmlDoc.CreateElement("webSite");
    
                XmlAttribute sitename1 = xmlDoc.CreateAttribute("sitename");
                sitename1.Value = sitename.Text.Trim();
                WebSite.Attributes.Append(sitename1);
                WebSite.InnerText = sitename.Text.Trim();
    
                XmlAttribute siteurl1 = xmlDoc.CreateAttribute("siteurl");
                siteurl1.Value = siteurl.Text.Trim();
                WebSite.Attributes.Append(siteurl1);
    
    
                xmlDoc.Load(AppDomain.CurrentDomain.BaseDirectory + "\" + XMLfile);//***一定需要先打开XML文件***
    
                root = xmlDoc.SelectSingleNode("root");//选择匹配的第一个XMLNODE
                //root = xmlDoc.GetElementById("root");
                root.AppendChild(WebSite);
                xmlDoc.AppendChild(root);
                xmlDoc.Save(XMLfile);
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                //addnode();
                checknode();
                MessageBox.Show("请到当前路径下的XML查看!");
    
            }
    
            /// <summary>
            /// 检查在网站名称处输入的sitename如果节点中存在则修改,如果不存在就修改此节点的siturl
            /// </summary>
            public void checknode()
            {
                int j = 0;
    
                xmlDoc.Load(AppDomain.CurrentDomain.BaseDirectory + "\" + XMLfile);//***一定需要先打开XML文件***
                XmlNodeList nodelist = xmlDoc.SelectSingleNode("root").ChildNodes;//获取root根节点的所有子节点
                foreach (XmlNode xn in nodelist)
                {
                    XmlElement xe = (XmlElement)xn;//将节点类型转换为XmlElement类型
                    if(xe.GetAttribute("sitename")==sitename.Text.Trim())
                    {
                        j = 1;
                        xe.SetAttribute("siteurl", siteurl.Text.Trim());
                        break;//结束整个循环体,continue是结束单次循环
                        
                    }
    
                }
    
                if (j == 0)
                {
                    addnode();
                    MessageBox.Show("添加成功");
    
                }
                else
                {
                    xmlDoc.Save(XMLfile);
                    MessageBox.Show("修改成功");
                }
     
            }
            /// <summary>
            /// 删除sitename文本框中的在xml节点中已存在此网站名的节点
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button2_Click(object sender, EventArgs e)
            {
                xmlDoc.Load(AppDomain.CurrentDomain.BaseDirectory + "\" + XMLfile);//***一定需要先打开XML文件***
                root = xmlDoc.SelectSingleNode("root");
                XmlNodeList nodelist = xmlDoc.SelectSingleNode("root").ChildNodes;//获取所有子节点
                foreach(XmlNode xn in nodelist)
                {
                    XmlElement xe =(XmlElement)xn;
                    if(xe.GetAttribute("sitename")==sitename.Text.Trim())
                    {
                        root.RemoveChild(xe);
                        break; 
    
                    }
                }
                xmlDoc.Save(XMLfile);
                MessageBox.Show("删除成功");
            }
        }
    }

    注:楼主菜鸟,大家一起学习~

  • 相关阅读:
    写在“开张”时
    上班真累
    版本控制
    电脑主板报警声音的故障现象对照表
    js页面打开倒计时
    js中的词法分析
    修改mysql数据库密码
    上班的感受
    能力是被逼出来的!!有压力才有动力
    js中绑定事件的三种方式
  • 原文地址:https://www.cnblogs.com/ammy714926/p/4516859.html
Copyright © 2011-2022 走看看