C# 读写xml文件总结 [详细]
C# 读写xml文件总结
- C#写入xml文件
- 1、XmlDocument
- 2、DataSet对象里的值来生成XML文件
- 3、利用XmlSerializer来将类的属性值转换为XML文件的元素值。
- 示例:写入xml
- 1、创建xml文档
- 2 、增加节点
- 3 、修改节点:
- 4 、删除节点
- c#读取xml文件
C#写入xml文件
1、XmlDocument
1。我认为是最原始,最基本的一种:利用XmlDocument向一个XML文件里写节点,然后再利用XmlDocument保存文件。
首先加载要写入的XML文件,但是如果没有的,就要新建,在新建的过程中,要有写入的代码;
XmlDocument doc = new XmlDocument();try{doc.Load("new.xml");}catch{XmlTextWriter xtw = new XmlTextWriter("new.xml", Encoding.UTF8);//新建XML文件 xtw.WriteStartDocument();xtw.WriteStartElement("gnode");// gnode根节点 xtw.WriteStartElement("myxm1");// gnode根节点下的元素myxmls xtw.WriteEndElement();xtw.WriteEndElement();xtw.WriteEndDocument();xtw.Close();doc.Load("new.xml");}XmlNode xn = doc.DocumentElement;//找到根节点 XmlElement xe = doc.CreateElement("myxml2");//在根节点下创建元素,如果是属性,则用XmlAttribute; xe.InnerText = "薪薪代码hahaha";//给子节点写入文本节点(值) xn.AppendChild(xe);//根节点将其纳入 doc.Save("new2.xml");//利用XmlDocument保存文件}
注意点:在新建根节点的时候,WriteStartElement,只能嵌套,也就是只能有一个根节点。
2、DataSet对象里的值来生成XML文件
应用到数据库,将数据库的DataSet对象里的值来生成XML文件的元素;
using (SqlConnection con = new SqlConnection("Server=.;DataBase=HGSTUDY;uid=sa;pwd=yao")){con.Open();SqlCommand command = new SqlCommand("select * from GL_STUDY", con);command.CommandType = CommandType.Text;DataSet ds = new DataSet("DATASET");//DATASET将成为XML文件中的根节点名称,否则系统将其命名为NewDataSet SqlDataAdapter sda = new SqlDataAdapter();sda.SelectCommand = command;sda.Fill(ds, "DATATABLE");//DATATABLE为所生成XML文件中的子节点名称,否则系统将其命名为Table。 ds.WriteXml("dbxml.xml");// DataSet的方法WriteXml将数据写入到XML文件,就是这么一句话。如果不保存到文件,直接ds.GetXML() }
3、利用XmlSerializer来将类的属性值转换为XML文件的元素值。
用一个字符串作为一个XML文档中的xmlAttribute或xmlElement。[其元素或属性由类的定义来设置(xml串行化)]
using System;System.xml.Serialization;
- 先初始化一个类,设置属性值
var xmlDoc = new XmlDocument();
//Create the xml declaration first
xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null));
//Create the root node and append into doc
var el = xmlDoc.CreateElement("Contacts");
xmlDoc.AppendChild(el);
// Contact
XmlElement elementContact = xmlDoc.CreateElement("Contact");
XmlAttribute attrID = xmlDoc.CreateAttribute("id");
attrID.Value = "01";
elementContact.Attributes.Append(attrID);
el.AppendChild(elementContact);
// Contact Name
XmlElement elementName = xmlDoc.CreateElement("Name");
elementName.InnerText = "Daisy Abbey";
elementContact.AppendChild(elementName);
// Contact Gender
XmlElement elementGender = xmlDoc.CreateElement("Gender");
elementGender.InnerText = "female";
elementContact.AppendChild(elementGender);
xmlDoc.Save("test1.xml");
- 建XmlSerializer实例
class XXX { XmlSerializer ser = new XmlSerializer(Type.GetType("forxml.truck")); Truck tr = new Truck(); tr.ID = 1; tr.cheID = "赣A T34923";}
- Serialize方法–完成对类的串行化
XmlTextWriter xtw = new XmlTextWriter("myxml.xml",Encoding.UTF8); 用XmlTextWriter 创建一个XML文件 ser.Serialize(xtw, tr); //如果只想显示,可以直接ser.Serialize(Console.Out, tr);
}
xml常用方法:
定义xml文档:XmlDocument xmlDoc = new XmlDocument();
初始化xml文档:xmlDoc.Load(“D:\book.xml”);//找到xml文件
创建根元素:XmlElement xmlElement = xmlDoc.CreateElement(“”, “Employees”, “”);
创建节点:XmlElement xeSub1 = xmlDoc.CreateElement(“title”);
查找Employees节点:XmlNode root = xmlDoc.SelectSingleNode(“Employees”);
添加节点:xe1.AppendChild(xeSub1);
更改节点的属性:xe.SetAttribute(“Name”, “李明明”);
移除xe的ID属性:xe.RemoveAttribute(“ID”);
删除节点title:xe.RemoveChild(xe2);
示例:写入xml
1、创建xml文档
public void CreateXMLDocument()
{XmlDocument xmlDoc = new XmlDocument();
//加入XML的声明段落,<?xml version="1.0" encoding="gb2312"?>XmlDeclaration xmlDeclar;xmlDeclar = xmlDoc.CreateXmlDeclaration("1.0", "gb2312", null);xmlDoc.AppendChild(xmlDeclar); //加入Employees根元素XmlElement xmlElement = xmlDoc.CreateElement("", "Employees", "");xmlDoc.AppendChild(xmlElement); //添加节点XmlNode root = xmlDoc.SelectSingleNode("Employees");XmlElement xe1 = xmlDoc.CreateElement("Node");xe1.SetAttribute("Name", "薪薪代码");xe1.SetAttribute("ISB", "2-3631-4"); //添加子节点XmlElement xeSub1 = xmlDoc.CreateElement("title");xeSub1.InnerText = "学习VS";xe1.AppendChild(xeSub1);XmlElement xeSub2 = xmlDoc.CreateElement("price");xe1.AppendChild(xeSub2);XmlElement xeSub3 = xmlDoc.CreateElement("weight");xeSub3.InnerText = "20";xeSub2.AppendChild(xeSub3);root.AppendChild(xe1);xmlDoc.Save("D:\\book.xml");//保存的路径
}
生成的xml文件如下:
<?xml version="1.0" encoding="GB2312"?>
-<Employees>-<Node ISB="2-3631-4" Name="薪薪代码"><title>学习VS</title>-<price><weight>20</weight></price></Node>
</Employees>
2 、增加节点
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("D:\\book.xml");//找到xml文件
XmlNode root = xmlDoc.SelectSingleNode("Employees");//查找Employees节点
XmlElement xe1 = xmlDoc.CreateElement("Node2");//添加Node2节点
xe1.SetAttribute("Name", "张飞");
XmlElement xeSub1 = xmlDoc.CreateElement("title");//定义子节点
xeSub1.InnerText = "心情好";
xe1.AppendChild(xeSub1);//添加节点到Node2
root.AppendChild(xe1);//添加节点到Employees
xmlDoc.Save("D:\\book.xml");
结果:
<?xml version="1.0" encoding="GB2312"?>-<Employees>-<Node ISB="2-3631-4" Name="薪薪代码"><title>学习VS</title>-<price><weight>20</weight></price></Node>-<Node2 Name="张三"><title>心情好</title></Node2>-<Node2 Name="张三"><title>心情好</title></Node2>
</Employees>
3 、修改节点:
public void ModifyNode()
{XmlDocument xmlDocument = new XmlDocument();xmlDocument.Load("D:\\book.xml");XmlNodeList nodeList = xmlDocument.SelectSingleNode("Employees").ChildNodes;//获取Employees节点的所有子节点foreach (XmlNode xn in nodeList)//遍历{XmlElement xe = (XmlElement)xn;if (xe.GetAttribute("Name") == "薪薪代码"){xe.SetAttribute("Name", "薪薪");//更改节点的属性XmlNodeList xnl = xe.ChildNodes;//获取xe的所有子节点foreach (XmlNode xn1 in xnl){XmlElement xe2 = (XmlElement)xn1;//将节点xn1的属性转换为XmlElementif (xe2.Name == "title")//找到节点名字为title的节点{xe2.InnerText = "今天天气不好";}if (xe2.Name == "price"){XmlNodeList xnl2 = xe2.ChildNodes;foreach (XmlNode xn2 in xnl2){if (xn2.Name == "weight"){xn2.InnerText = "88";}}}}}}xmlDocument.Save("D:\\book2.xml");
}
运行结果:
<?xml version="1.0" encoding="GB2312"?>
-<Employees>
-<Node ISB="2-3631-4" Name="薪薪">
<title>今天天气不好</title>-<price>
<weight>88</weight>
</price>
</Node>
-<Node2 Name="张三">
<title>心情好</title>
</Node2></Employees>
4 、删除节点
public void DeleteNode()
{XmlDocument xmlDocument = new XmlDocument();xmlDocument.Load("D:\\book1.xml");XmlNodeList xnl = xmlDocument.SelectSingleNode("Employees").ChildNodes;foreach (XmlNode xn in xnl){if (xn.Name == "Node"){XmlElement xe = (XmlElement)xn;//将xn的属性转换为XmlElementxe.RemoveAttribute("ID");//移除xe的ID属性XmlNodeList xnl2 = xe.ChildNodes;for (int i = 0; i < xnl2.Count; i++){XmlElement xe2 = (XmlElement)xnl2.Item(i);if (xe2.Name == "title"){xe.RemoveChild(xe2);//删除节点title}}}}xmlDocument.Save("D:\\book3.xml");
}
结果:
<?xml version="1.0" encoding="GB2312"?>
-<Employees>
-<Node ISB="2-3631-4" Name="薪薪">-<price>
<weight>20</weight>
</price>
</Node>-
<Node2 Name="张三">
<title>心情好</title>
</Node2>-
<Node2 Name="张三">
<title>心情好</title>
</Node2>
</Employees>
c#读取xml文件
xml文件如下:
<?xml version="1.0" encoding="utf-8" ?>
<configurationN><ServerAddress>1143</ServerAddress><ID>192.168</ID></configurationN>
在写入xml文件时,最主要使用了两个方法:Load和Save。
Load:初始化xml文档,以便项目文件获取具体的xml节点的值。
public void Load(string path)
{try{XmlDocument xmlDocument = new XmlDocument();xmlDocument.Load(path);XmlNodeList xnl = xmlDocument.SelectSingleNode(managerNode).ChildNodes;foreach (XmlNode xn in xnl){if (xn.Name == configuration_ServerAddress){ServerAddress = xn.InnerText;}}}catch(Exception ex){ }
}
Save:在项目系统中进行修改配置文件值后,需要对xml进行重新保存
public void Save(string path)
{try{XmlDocument xmlDocument = new XmlDocument();xmlDocument.Load(path);XmlNodeList xnl = xmlDocument.SelectSingleNode(managerNode).ChildNodes;foreach (XmlNode xn in xnl){if (xn.Name == configuration_ServerAddress){xn.InnerText = ServerAddress;}}xmlDocument.Save(path);}catch (Exception ex){ }
}
此处将所有代码都贴出来,方便下次实现。因为项目是WPF文件,而且都是简单控件,所以只贴出后台代码。
class ConfigurationManager:INotifyPropertyChanged
{public const string managerNode = "configurationN";//根节点public const string configuration_ServerAddress = "ServerAddress";//子节点private string _ServerAddress;public string ServerAddress{get { return _ServerAddress; }set{_ServerAddress = value;NotifyPropertyChanged("ServerAddress");}}public void Load(string path){try{XmlDocument xmlDocument = new XmlDocument();xmlDocument.Load(path);XmlNodeList xnl = xmlDocument.SelectSingleNode(managerNode).ChildNodes;foreach (XmlNode xn in xnl){if (xn.Name == configuration_ServerAddress){ServerAddress = xn.InnerText;}}}catch(Exception ex){ }}public void Save(string path){try{XmlDocument xmlDocument = new XmlDocument();xmlDocument.Load(path);XmlNodeList xnl = xmlDocument.SelectSingleNode(managerNode).ChildNodes;foreach (XmlNode xn in xnl){if (xn.Name == configuration_ServerAddress){xn.InnerText = ServerAddress;}}xmlDocument.Save(path);}catch (Exception ex){ }}public event PropertyChangedEventHandler PropertyChanged;private void NotifyPropertyChanged(string propertyName){if (PropertyChanged != null){PropertyChanged(this, new PropertyChangedEventArgs(propertyName));}}public static ConfigurationManager Instance = new ConfigurationManager();
}public partial class MainWindow : Window
{public MainWindow(){InitializeComponent();Start();this.tb1.Text = ConfigurationManager.Instance.ServerAddress.ToString();}private string path = "CONFIG\\System.xml";private void button1_Click(object sender, RoutedEventArgs e){ConfigurationManager.Instance.ServerAddress = this.tb1.Text;ConfigurationManager.Instance.Save(path);}private void button2_Click(object sender, RoutedEventArgs e){Application.Current.Shutdown();}private void Start(){ConfigurationManager.Instance.Load(path);}
}
相关文章:
C# 读写xml文件总结 [详细]
C# 读写xml文件总结C#写入xml文件1、XmlDocument2、DataSet对象里的值来生成XML文件3、利用XmlSerializer来将类的属性值转换为XML文件的元素值。示例:写入xml1、创建xml文档2 、增加节点3 、修改节点:4 、删除节点c#读取xml文件C#写入xml文件 1、XmlDo…...
【Java基础】IO流
IO流 最后一定要关闭流,防止资源泄露 字节流 一次读取1字节,8比特 FileInputStream import org.junit.jupiter.api.Test;import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;public class CopyBytes {pub…...
Boolean,Array,Object数据类型(回顾)
Boolean数据类型范围Boolean(value)Object数据类型特点键值对数组特点类数组特点 Boolean数据类型范围 true,false 链接 Boolean(value) 定义:其他类型转布尔类型 六大假值:false,undefined,null,NaN,0…...
Python常见的数据类型
♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的绽放࿰…...
欠缺知识点罗列
UML五种关系的特点 依赖,关联,组合,聚合,泛化。认识UML类关系——依赖、关联、聚合、组合、泛化 - 腾讯云开发者社区-腾讯云 数据结构- 生成树的定义。 每周学点大数据 | No.17最小生成树 - 腾讯云开发者社区-腾讯云 有向图。 …...
基于springboot+vue的校园社团管理系统(前后端分离)
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...
你了解互联网APP推荐的背后逻辑么(下)?
上篇重点介绍了互联网APP在搜索交互场景下的通用逻辑,让大众对每天离不开的搜索进行了一个普遍介绍。这一篇,我们来聊聊抖音、头条等APP划一划这个动作背后,是怎么做推荐的。推荐的背后,离不开每个用户的数据,而且这个…...
总是跳转到国内版(cn.bing.com)?New Bing使用全攻略
你是否想要使用强大的(被削后大嘘)New Bing? 你是否已经获得了New Bing的使用资格? 你是否在访问www.bing.com/new时提示页面不存在? 你是否在访问www.bing.com时总是重定向到cn.bing.com而使用不了New Bing? New Bi…...
神经网络的基本骨架—nn.Module使用
一、pytorch官网中torch.nn的相关简介可以看到torch.nn中有许多模块:二、Containers模块1、MODULE(CLASS : torch.nn.Module)import torch.nn as nn import torch.nn.functional as Fclass Model(nn.Module):#nn.Module---所有神经网络模块的…...
面试官:你是怎样进行react组件代码复用的
mixin Mixin 设计模式 Mixin(混入)是一种通过扩展收集功能的方式,它本质上是将一个对象的属性拷贝到另一个对象上面去,可以拷贝多个属性到一个对象上,为了解决代码复用问题。 常用的方法:JQuery 的 exte…...
arxiv2017 | 用于分子神经网络建模的数据增强 SMILES Enumeration
论文标题:SMILES Enumeration as Data Augmentation for Neural Network Modeling of Molecules论文地址:https://arxiv.org/abs/1703.07076代码地址:https://github.com/Ebjerrum/SMILES-enumeration一、摘要摘要中明显提出:先指…...
倒计时2天!TO B人的传统节日,2023年22客户节(22DAY)
去年,2022.02.22,正月二十二星期二,在这个最多2的一天,成功举办了“首届22客户节(22DAY)”,一群To B互联网人相约杭州见证; 癸卯兔年,2023.02.22,让我们再度…...
java版工程管理系统Spring Cloud+Spring Boot+Mybatis实现工程管理系统源码
java版工程管理系统Spring CloudSpring BootMybatis实现工程管理系统 工程项目各模块及其功能点清单 一、系统管理 1、数据字典:实现对数据字典标签的增删改查操作 2、编码管理:实现对系统编码的增删改查操作 3、用户管理:管理和…...
数据结构刷题(六):142环形链表II、242有效的字母异位词、383赎金信、349两个数组的交集
1.环形链表II题目链接思路:设置快慢双指针注意:(1)是否有环(快慢双指针是否能碰面也就是相等)(2)环形入口的判断。从头结点出发一个指针,从相遇节点 也出发一个指针&…...
OpenGL学习日记之光照计算
引言 现实生活中的光照极其复杂,而且会收到很多因素的影响,是我们当前计算机的算力无法模拟的。因此我们会根据一些简化的模型来模拟现实光照,这样在可以模拟出近似的光照感受,但是又没有那么复杂的计算。 常用的光照模型有&…...
七大排序经典排序算法
吾日三省吾身:高否?富否?帅否?答曰:否。滚去学习!!!(看完这篇文章先)目前只有C和C的功底,暂时还未开启新语言的学习,但是大同小异,语法都差不多。目录:一.排序定义二.排序…...
设计模式—“对象性能”
面向对象很好地解决了“抽象”的问题,但是必不可免地要付出一定的代价。对于通常情况来讲,面向对象的成本大都可以忽略不计。但是某些情况,面向对象所带来的成本必须谨慎处理。 典型模式有:Singleton、Flyweight 一、Flyweight 运用共享技术将大量细粒度的对象进项复用,…...
基于Spring Boot的零食商店
文章目录项目介绍主要功能截图:登录后台首页个人信息管理用户管理前台首页购物车部分代码展示设计总结项目获取方式🍅 作者主页:Java韩立 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关…...
Python语言的优缺点
为初学者而著!适合准备入行开发的零基础员学习python。python也是爬虫、大数据、人工智能等知识的基础。感兴趣的小伙伴可以评论区留言,领取视频教程资料和小编一起学习,共同进步!https://www.bilibili.com/video/BV13D4y1G7pt/?…...
3款强大到离谱的电脑软件,个个提效神器,从此远离加班
推荐3款让你偷懒,让你上头的提效电脑软件,个个功能强大,让你远离加班! 很多几个小时才能做好的事情,用上它们,只需要5分钟就行!! 1、JNPF —— 个人最喜欢的低代码软件 它为开发者…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
