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 —— 个人最喜欢的低代码软件 它为开发者…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...
