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 —— 个人最喜欢的低代码软件 它为开发者…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...