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>\r\n</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("删除成功");
        }
    }
}

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

 

posted @ 2015-05-20 12:24  依旧一生有你  阅读(1374)  评论(0编辑  收藏  举报