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

注:楼主虽菜鸟,本文原创,如转载请注明原作者,谢谢!

大家一起学习~

时间: 2024-08-28 13:11:44

C# Winform --xml文件的相关文章

c#读取xml文件配置文件Winform及WebForm-Demo具体解释

我这里用Winform和WebForm两种为例说明怎样操作xml文档来作为配置文件进行读取操作. 1.新建一个类,命名为"SystemConfig.cs".代码例如以下: <span style="font-family:Microsoft YaHei;font-size:14px;">using System; using System.Collections.Generic; using System.Text; using System.Xml;

c#读取xml文件配置文件Winform及WebForm-Demo详解

我这里用Winform和WebForm两种为例说明如何操作xml文档来作为配置文件进行读取操作. 1.新建一个类,命名为"SystemConfig.cs",代码如下: <span style="font-family:Microsoft YaHei;font-size:14px;">using System; using System.Collections.Generic; using System.Text; using System.Xml; us

C#WinForm 用textbox与button控件,向xml文件中增加新的数据

1 旧的xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <datas> 3 <XianJia> 4 <ShengHao>女娲娘娘</ShengHao> 5 <Password>nwnn</Password> 6 </XianJia> 7 <XianJia> 8 <ShengHao>后土娘娘</Sh

C#中常用的几种读取XML文件的方法

XML文件是一种常用的文件格式,例如WinForm里面的app.config以及Web程序中的web.config文件,还有许多重要的场所都有它的身影.Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具.XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用.微软也提供了一系列类库来倒帮助我们在应用程序中存储XML文件. “在程序中访问

使用XmlReader读取xml文件之二

在.net开发中经常需要读写xml形式的文件(app.config和web.config分别是WinForm和WebForm中使用到的 xml文件的一个特列,并且微软提供了通用的方法,在此就不赘述了), .net类库提供了多种读写xml文件的方式,每一种方式都有其优点和 缺点,因而有其实用性. 下面列出微软.net类库提供的读写xml文件个类及其特点: 类名称 优点 缺点 XmlReader 快速.高效.可扩展 只读,只向前,需要人工验证 XmlDocument 可往返.可读写.支持XPath筛

Xml文件的相关操作

Xml文档很久没有用过了,今天开开鲜,新手专区,不喜勿喷,运用的是WinForm编写 XMl文件的创建 /// <summary> /// 创建Xml文件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnCreateXml_Click(object send

在asp.net 中应用POST传递和接收XML文件以及参数.(转)

使用POST方式可以向别的页面发送请求,并获取返回结果. 可以从一个页面发送POST到另一个页面,也可以在winform工程中使用HTTPRequest发送POST到一个页面.我们拿ASP.NET的aspx页面做个例子,从一个aspx页面POST.aspx ,发送请求到Receive.aspx页面. 1.首先,建立工程,添加两个页面,Post.aspx和Receive.aspx 在post页面中放一个BUTTON,在它的click方法中我们可以写这样的一段代码: private void But

C#针对xml文件转化Dictionary的方法

本文实例讲述了C#针对xml文件转化Dictionary的方法.分享给大家供大家参考.具体实现方法如下: 下面是xml文件: 代码如下: <?xml version="1.0″ encoding="utf-8″ ?> <nodes> <国土局> <name>市局国土资源局</name> <code>330</code> <受理 telephone="88205156″>萍,倩<

xml文件保存与读取(最基础的方式)

一.从xml文件读取数据到Winform: 1.调用 using System.Xml; 2.XmlDocument xmlDoc = new XmlDocument(); 3.xmlDoc.Load(Application.StartupPath + "\\ParaConfig.xml"); 4.XmlElement xmlRoot = xmlDoc.DocumentElement;5.XmlNode login = xmlRoot.ChildNodes[0];6. this.txb