背景:

在工作中,学习和使用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. System.InvalidOperationException: 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。

    今天在写导入Excel表格的代码,运行时却报异常,异常信息: System.InvalidOperationException: 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0 ...

  2. 微信小程序把玩(十一)icon组件

    原文:微信小程序把玩(十一)icon组件 这些是提供的所支持的图标样式,根据需求在此基础上去修改大小和颜色. 主要属性: 使用方式: wxml <!--成功图标--> <icon t ...

  3. UWP开发学习笔记3

    获取可视化状态列表 private void Button_Click(object sender, RoutedEventArgs e) { //获取CheckBox控件可视化树中的子元素数量 in ...

  4. oracle解析

    Oracle数据库中的CURSOR分为两种类型:Shared Cursor 和 Session Cursor 1,Shared Cursor Oracle里的第一种类型的Cursor就是Shared ...

  5. Qt-vs-addin失效的问题

    Qt-vs-addin的小问题 使用Visual Studio进行Qt开发的时候,需要安装一个插件.然而有时候这个插件的一些工具却莫名其妙的失效: 其中qt5appwrapper.exe用于编辑Qt工 ...

  6. FrieMonkey获取手机的IMSI等信息

    procedure THeaderFooterForm.FormCreate(Sender: TObject); var TelephonyManager: JTelephonyManager; Te ...

  7. qtchooser - a wrapper used to select between Qt development binary(2种方法)

    ---------------------------------------------------------------------------------------------------- ...

  8. jquery选择器集锦

    一,基本选择器: 1 2 3 4 $("#txtName");   $("#txt\\#b");//获取id为 txt#b的元素,\\为转义符 $(" ...

  9. java-mysql(3) 读写image

    在mysql里面用来存储图片有一个特殊的数据对象叫做 Blob(Binary Large Object). 数据库里面插入一张图片: 第一步:需要为图片创建一个文件对象 File img = new ...

  10. Spring cloud stream【入门介绍】

    案例代码:https://github.com/q279583842q/springcloud-e-book   在实际开发过程中,服务与服务之间通信经常会使用到消息中间件,而以往使用了哪个中间件比如 ...