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 = ; 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文件的更多相关文章
- WinForm中使用XML文件存储用户配置及操作本地Config配置文件
大家都开发winform程序时候会大量用到配置App.config作为保持用户设置的基本信息,比如记住用户名,这样的弊端就是每个人一些个性化的设置每次更新程序的时候会被覆盖. 故将配置文件分两大类: ...
- c#读取xml文件配置文件Winform及WebForm-Demo具体解释
我这里用Winform和WebForm两种为例说明怎样操作xml文档来作为配置文件进行读取操作. 1.新建一个类,命名为"SystemConfig.cs".代码例如以下: < ...
- WinForm中DataGridView对XML文件的读取
转自http://www.cnblogs.com/a1656344531/archive/2012/11/28/2792863.html c#读取XML XML文件是一种常用的文件格式,例如Win ...
- Winform中对xml文件进行保存时空白节点自动换行问题的解决
场景 Winform中自定义xml配置文件后对节点进行读取与写入: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10053213 ...
- 在asp.net 中应用POST传递和接收XML文件以及参数.(转)
使用POST方式可以向别的页面发送请求,并获取返回结果. 可以从一个页面发送POST到另一个页面,也可以在winform工程中使用HTTPRequest发送POST到一个页面.我们拿ASP.NET的a ...
- 使用XmlReader读取xml文件之二
在.net开发中经常需要读写xml形式的文件(app.config和web.config分别是WinForm和WebForm中使用到的 xml文件的一个特列,并且微软提供了通用的方法,在此就不赘述了) ...
- C#中经常使用的几种读取XML文件的方法
XML文件是一种经常使用的文件格式,比如WinForm里面的app.config以及Web程序中的web.config文件,还有很多重要的场所都有它的身影.Xml是Internet环境中跨平台的,依赖 ...
- WebAPI调用笔记 ASP.NET CORE 学习之自定义异常处理 MySQL数据库查询优化建议 .NET操作XML文件之泛型集合的序列化与反序列化 Asp.Net Core 轻松学-多线程之Task快速上手 Asp.Net Core 轻松学-多线程之Task(补充)
WebAPI调用笔记 前言 即时通信项目中初次调用OA接口遇到了一些问题,因为本人从业后几乎一直做CS端项目,一个简单的WebAPI调用居然浪费了不少时间,特此记录. 接口描述 首先说明一下,基于 ...
- 通俗易懂,C#如何安全、高效地玩转任何种类的内存之Span的脾气秉性(二)。 异步委托 微信小程序支付证书及SSL证书使用 SqlServer无备份下误删数据恢复 把list集合的内容写入到Xml中,通过XmlDocument方式写入Xml文件中 通过XDocument方式把List写入Xml文件
通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的脾气秉性(二). 前言 读完上篇<通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的本质(一).>,相信大家对sp ...
随机推荐
- 十七 bootstrap-table tableExport 导出xlsx格式表格
原文:十七 bootstrap-table tableExport 导出xlsx格式表格 在[十六.bootstrap-table javascript导出数据]中,打开导出的表格时,总会弹出一个提示 ...
- 错误代码: 0x800700b7 配置错误:定义了重复的“system.web.extensions/scripting/scriptResourceHandler”节
操作环境:Windows 8.1 IIS8.5 VS2008 解决方法: 把应用程序池的.Net CLR 版本从4.0修改为2.0即可.如下图所示:
- 无法删除 NTFS 盘上的文件或文件夹(对Windows文件的各种情况有比较详细的描述)
简介 本文介绍您可能无法删除 NTFS 文件系统卷上的文件或文件夹的原因,以及如何分析造成此问题的不同原因从而解决此问题. 更多信息 注意:在内部,NTFS 将文件夹作为特殊类型的文件进行处理.因此, ...
- TIFF图片简介
每个TIFF文件都是从指示字节顺序的两个字节开始的.“II”表示小字节在先.“MM”表示大字节在先字节顺序.后面的两个字节表示数字42.数字42是“为了其深刻的哲学意义"而选择的. 42的读 ...
- WCF nginx反向代理遇到的问题
正常配置了nginx反向代理,其他java站点什么的都正常,就wcf总是失败.始终会跑如下异常: 由于 AddressFilter 在 EndpointDispatcher 不匹配,To 为“http ...
- Hadoop中重要概念简要总结
Hadoop是一个利用大规模计算机集群,可处理大量数据的分布式并行框架. Hadoop 官网 Hadoop的核心设计包括HDFS和MapReduce. HDFS HDFS(Hadoop Distrib ...
- 初涉Delphi Socket编程
不是第一次接触socket编程了,但以前都是看别人的依葫芦画瓢,也不知道具体的原理. 新的项目,有了新的开始,同时也需要有新的认识. Delphi 中带有两套TCP Socket组件: Indy So ...
- Windows 7 频繁提示:计算机的内存不足
最近由于同时打开的程序比较多,Windows 7 频繁提示:计算机的内存不足,如下图: 问题原因: 经过一番尝试,得出一个大概的结论:当虚拟内存空间的大小小于物理内存空间的大小时,一旦程序开的太多,物 ...
- 解决SpringBoot多模块发布时99%的问题?SpringBoot发布的8个原则和4个问题的解决方案
如果使用 SpringBoot 多模块发布到外部 Tomcat,可能会遇到各种各样的问题.本文归纳了以下 8 个原则和发布时经常出现的 4 个问题的解决方案,掌握了这些原则和解决方案,几乎可以解决绝大 ...
- 【canvas】高级功能一 变形
[canvas]Demo1 scale缩放 <!DOCTYPE html> <html lang="en"> <head> <meta c ...