背景:

在工作中,学习和使用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 = ; 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 = ;
xe.SetAttribute("siteurl", siteurl.Text.Trim());
break;//结束整个循环体,continue是结束单次循环 } } if (j == )
{
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("删除成功");
}
}
}

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

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

  1. WinForm中使用XML文件存储用户配置及操作本地Config配置文件

    大家都开发winform程序时候会大量用到配置App.config作为保持用户设置的基本信息,比如记住用户名,这样的弊端就是每个人一些个性化的设置每次更新程序的时候会被覆盖. 故将配置文件分两大类: ...

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

    我这里用Winform和WebForm两种为例说明怎样操作xml文档来作为配置文件进行读取操作. 1.新建一个类,命名为"SystemConfig.cs".代码例如以下: < ...

  3. WinForm中DataGridView对XML文件的读取

    转自http://www.cnblogs.com/a1656344531/archive/2012/11/28/2792863.html c#读取XML   XML文件是一种常用的文件格式,例如Win ...

  4. Winform中对xml文件进行保存时空白节点自动换行问题的解决

    场景 Winform中自定义xml配置文件后对节点进行读取与写入: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10053213 ...

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

    使用POST方式可以向别的页面发送请求,并获取返回结果. 可以从一个页面发送POST到另一个页面,也可以在winform工程中使用HTTPRequest发送POST到一个页面.我们拿ASP.NET的a ...

  6. 使用XmlReader读取xml文件之二

    在.net开发中经常需要读写xml形式的文件(app.config和web.config分别是WinForm和WebForm中使用到的 xml文件的一个特列,并且微软提供了通用的方法,在此就不赘述了) ...

  7. C#中经常使用的几种读取XML文件的方法

    XML文件是一种经常使用的文件格式,比如WinForm里面的app.config以及Web程序中的web.config文件,还有很多重要的场所都有它的身影.Xml是Internet环境中跨平台的,依赖 ...

  8. WebAPI调用笔记 ASP.NET CORE 学习之自定义异常处理 MySQL数据库查询优化建议 .NET操作XML文件之泛型集合的序列化与反序列化 Asp.Net Core 轻松学-多线程之Task快速上手 Asp.Net Core 轻松学-多线程之Task(补充)

    WebAPI调用笔记   前言 即时通信项目中初次调用OA接口遇到了一些问题,因为本人从业后几乎一直做CS端项目,一个简单的WebAPI调用居然浪费了不少时间,特此记录. 接口描述 首先说明一下,基于 ...

  9. 通俗易懂,C#如何安全、高效地玩转任何种类的内存之Span的脾气秉性(二)。 异步委托 微信小程序支付证书及SSL证书使用 SqlServer无备份下误删数据恢复 把list集合的内容写入到Xml中,通过XmlDocument方式写入Xml文件中 通过XDocument方式把List写入Xml文件

    通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的脾气秉性(二).   前言 读完上篇<通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的本质(一).>,相信大家对sp ...

随机推荐

  1. oracle rac 修改dbid和dbname

    =======================修改数据库dbid====================== 1.查看目前数据库dbid以及dbname [root@rac01 ~]# su - or ...

  2. WIN10以后如果Manifest中不写支持WIN10的话,获取版本号的API获取的是6

    if TOSVersion.Major = 10 then  // 高版本的Delphi(比如Berlin)可以这样写 ShowMessage('Windows 10'); 或者: if Win32M ...

  3. 如何在 Xcode 中进行 Qt 开发(可使用使用 Homebrew 来安装qt)

    第一步 安装 Qt 分为两种情况: 1. 希望使用 Qt Quick 等先进Qt5技术, 2. 只需要 Qt 4.8的类库即可. 第一种, 直接去官网下载 Mac安装包, 在此不作过多说明, 开发时也 ...

  4. qt---cdb(Microsoft Console Debugger)调试

    支持的调试器 windows系统下主要的调试器: CDB ,只能调试用户程序,只有控制台界面,以命令行形式工作 NTSD, 只能调试用户程序,只有控制台界面,以命令行形式工作 KD,主要用于内核调试, ...

  5. QT 强制杀死进程

    bool KillProcess(QString ProcessName){  bool result = false; QString str1; HANDLE hSnapShot = Create ...

  6. Qt元类型(MetaType)注册入门(附一些官方文档的关键摘录)

    昨天调试项目时,突然发现如下消息: QObject::connect: Cannot queue arguments of type 'ERROR_LEVEL' (Make sure 'ERROR_L ...

  7. leetcode解答索引一期工程:1 - 40题

    更多内容敬请期待.解法是否最优不能保证,但OJ肯定是能过的. 1: Two Sum 2: Median of Two Sorted Arrays 3: Longest Substring Withou ...

  8. 浅析C#代理

    delegate 是委托声明的基础,是.net 的委托的声明的关键字action 是基于delegate实现的代理 有多个参数(无限制个数)无返回值的代理 func 是基于delegate实现的代理 ...

  9. [2017.02.13] linux平台下统计C++项目文件个数和代码行数

    #输出排序后文件名 file='find . -name "*.[ch]" | sort' #统计文件个数 filecnt='find . -name "*.[ch]&q ...

  10. 3015C语言_流程设计

    第五章 流程设计 5.1 C语句概述 C语言的语句用来向计算机系统发出指令,一个实际的源程序通常包含若干语句,这些语句用来完成一定的操作任务. 1.其他类型语句 函数调用语句(由函数调用加一个分号构成 ...