【C#】XML的基础知识以及读取XML文件
最近在学读取文件
目录
- 介绍
- 特点
- 结构
- XML的语法规则
- XML 命名规则
- C#操作XML
- 新建
- 读取
- 第一种
- 第二种
- 第三种
- 读取属性
介绍
XML (可扩展标记语言,eXtensible Markup Language) 是一种标记语言,它被设计用来传输和存储数据。
特点
- 可扩展性:由于 XML 的语法灵活,可以通过定义新的标记和属性来扩展其功能。
- 可读性:XML 的语法结构使其易于阅读和理解。
- 平台无关性:XML 可以在不同的平台上被处理和解析,如 Windows、Linux、MacOS 等。
- 编码规范:XML 规定了严格的语法和编码规范,确保数据的正确解析。
结构
一个简单的XML文档展示:

第一行是 XML 声明,它定义 XML 的版本和所使用的编码),然后是根元素,然后是根元素的子元素(当然,可以继续嵌套)
XML的结构由标签、元素、属性和文本组成。
-
标签(tag):以尖括号(< >)包围的单词或词组,用来起始和结束元素。
-
元素(element):指标签包含的整个内容。元素通常由开始标签和结束标签组成,有时也可以是自封闭的标签。
-
属性(attribute):定义在开始标签内的附加信息。属性是由名称和值组成的,它们用空格隔开。
-
文本(text):元素内部不包含标签的部分。文本可以包含实际的数据或者说明信息。

XML的语法规则
- XML文档必须有一个根元素,该元素是所有其他元素的父元素。
- XML元素的开始标签和结束标签要成对出现。
- XML标签名严格区分大小写。
- XML属性必须在开始标签中定义,并且属性名和属性值必须用等号(=)分隔。
- XML属性值必须用引号(" 或 ')括起来。
- XML的注释 < !-- 这是注释内容 – >。
- XML文档必须符合XML规范,即必须包含声明。
XML 命名规则
- 名称不能以数字或者标点符号开始
- 名称不能以字符 “xml”(或者 XML、Xml)开始
- 名称不能包含空格
C#操作XML
新建
-
添加—>类

-
选择XML文件->输入一个名称->点击添加

-
输入内容就可以了!!
<?xml version="1.0" encoding="utf-8" ?>
<person><person p="man"><name>LiHua</name><age>18</age><height>172</height></person><person p="woman"><name>Ling</name><age>18</age><height>168</height></person>
</person>
有了这个XML文件之后,接下来,我们可以对它进行一些操作了!!
读取
第一种

代码:
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;namespace _02_XML操作
{class Program{static void Main(string[] args){XmlDocument xmlDoc = new XmlDocument();xmlDoc.Load("Person.xml");XmlNode root = xmlDoc.ChildNodes[1];XmlNodeList personList = root.ChildNodes;foreach (XmlNode person in personList){foreach (XmlNode node in person.ChildNodes){Console.WriteLine(node.Name + ":" + node.InnerText);}}}}
}
运行结果:

第二种
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;namespace _02_XML操作
{class Program{static void Main(string[] args){List<Person> list = new List<Person>();XmlDocument xmlDoc = new XmlDocument();xmlDoc.LoadXml(File.ReadAllText("Person.xml"));XmlNode root = xmlDoc.ChildNodes[1];XmlNodeList personList = root.ChildNodes;foreach(XmlNode person in personList){Person obj = new Person();foreach(XmlNode node in person.ChildNodes){if (node.Name == "name"){obj.name = node.InnerText;}else if (node.Name == "age"){obj.age = Int32.Parse(node.InnerText);}else if (node.Name == "height"){obj.height = Int32.Parse(node.InnerText);}}list.Add(obj);}foreach(Person p in list){Console.WriteLine(p.name + "," + p.age + "," + p.height);}}}
}
运行结果:

第三种
代码:
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;namespace _02_XML操作
{class Program{static void Main(string[] args){List<Person> list = new List<Person>();XmlDocument xmlDoc = new XmlDocument();xmlDoc.LoadXml(File.ReadAllText("Person.xml"));XmlNode root = xmlDoc.ChildNodes[1];XmlNodeList personList = root.ChildNodes;foreach(XmlNode person in personList){Person obj = new Person();XmlElement nameEle = person["name"];obj.name = nameEle.InnerText;XmlElement ageEle = person["age"];obj.age = Int32.Parse(ageEle.InnerText);XmlElement heightEle = person["height"];obj.height = Int32.Parse(heightEle.InnerText);list.Add(obj);}foreach(Person p in list){Console.WriteLine(p.name + "," + p.age + "," + p.height);}}}
}
运行结果:

读取属性
代码:
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;namespace _02_XML操作
{class Program{static void Main(string[] args){List<Person> list = new List<Person>();XmlDocument xmlDoc = new XmlDocument();xmlDoc.LoadXml(File.ReadAllText("Person.xml"));XmlNode root = xmlDoc.ChildNodes[1];XmlNodeList personList = root.ChildNodes;foreach(XmlNode person in personList){Person obj = new Person();//读取属性XmlAttributeCollection attriCol = person.Attributes;XmlAttribute attri = attriCol["p"];obj.p = attri.Value;XmlElement nameEle = person["name"];obj.name = nameEle.InnerText;XmlElement ageEle = person["age"];obj.age = Int32.Parse(ageEle.InnerText);XmlElement heightEle = person["height"];obj.height = Int32.Parse(heightEle.InnerText);list.Add(obj);}foreach(Person p in list){Console.WriteLine(p.p+","+p.name + "," + p.age + "," + p.height);}}}
}
运行结果:

💦更多内容请前往主页置顶或点击链接直达:
【unity3D】游戏开发专栏的目录
【VR】VR开发专栏的目录
相关文章:
【C#】XML的基础知识以及读取XML文件
最近在学读取文件 目录 介绍特点结构XML的语法规则XML 命名规则 C#操作XML新建读取第一种第二种第三种 读取属性 介绍 XML (可扩展标记语言,eXtensible Markup Language) 是一种标记语言,它被设计用来传输和存储数据。 特点 可扩展性:由于…...
Immutable.js简介
引子 看一段大家熟悉的代码 const state {str: wwming,obj: {y: 1},arr: [1, 2, 3] } const newState stateconsole.log(newState state) // truenewState和state是相等的 原因: 由于js的对象和数组都是引用类型。所以newState的state实际上是指向于同一块内存…...
C语言进阶教程(位操作和进制数的表示)
文章目录 前言一、左移和右移二、清除对应的位为0和设置对应的位为11.设置对应的位为12.清除对应的位为0 三、进制数的表示四、& ^ | ~总结 前言 本篇文章给大家讲解一下C语言中的位操作,在嵌入式中位操作是经常需要使用的,那么下面就让我们来学习一…...
Loguru:功能强大、简单易用的Python日志库
文章目录 Loguru:Python的日志库安装 Loguru基本用法配置 Loguruadd() 语句remove() 语句设置日志文件保留日志的等级设置控制台日志显示等级Loguru:Python的日志库 Loguru 是一个功能强大、简单易用的日志库,可以让 Python 的日志记录变得更加轻松。它提供了丰富的功能和配…...
idea之maven的安装与配置
我们到maven的官网里下载maven,地址:https://maven.apache.org/download.cgi下载完成后解压即可配置环境变量 此电脑–>右键–>属性–>高级系统设置–>环境变量–>系统变量(S)–>新建一个系统变量 变量名&…...
【最新面试问题记录持续更新,java,kotlin,android,flutter】
最近找工作,复习了下java相关的知识。发现已经对很多概念模糊了。记录一下。部分是往年面试题重新整理,部分是自己面试遇到的问题。持续更新中~ 目录 java相关1. 面向对象设计原则2. 面向对象的特征是什么3. 重载和重写4. 基本数据类型5. 装箱和拆箱6. …...
面试:经典问题解决思路
1. 秒杀系统架构 参考:秒杀系统架构优化思路 2. 如何防止订单重复提交 重复提交原因: 一种是由于用户在短时间内多次点击下单按钮,或浏览器刷新按钮导致。另一种则是由于Nginx或类似于SpringCloud Gateway的网关层,进行超时重试造成的。 方案…...
CG MAGIC分享3ds Max卡顿未保存处理方法有哪些?
3ds Max进行建模、渲染这一系列过程中,大家使用中都会遇到各种原因导致软件卡顿或崩溃是很常见的情况。 可以说卡机没关系,可是卡顿发生时,如果之前的工作没有及时保存,可能会导致数据的丢失和时间的浪费。这就是最让人烦躁的了&…...
[python 刷题] 238 Product of Array Except Self
[python 刷题] 238 Product of Array Except Self 题目: Given an integer array nums, return an array answer such that answer[i] is equal to the product of all the elements of nums except nums[i]. The product of any prefix or suffix of nums is guar…...
UG NX二次开发(C#)-计算直线到各个坐标系轴向的投影角度
文章目录 1、前言2、需求分析3、NXOpen方法实现3.1 创建基准坐标系3.2 然后计算直线到基准坐标系的轴向角度3.3 代码调用4、测试效果为:1、前言 最近有个粉丝问我如何计算直线到坐标系各个轴向的角度,这里用UG NX二次开发(C#)实现。当然,这里的内容是经验之谈,如果有更好的…...
C# ComboBox 和 枚举类型(Enum)相互关联
C# ComboBox 和 枚举类型(Enum)相互关联 目的 在C# Winform面板上的ComboBox选择项,由程序填写某个Enum的各个枚举项目。 在运行中读取ComboBox的选择项,返回Enum数值。 非编程方法 低阶做法可以在winform设计窗口手动填写,但是不会自动跟…...
Linux CentOS7 tree命令
tree就是树,是文件或文件名输出到控制台的一种显示形式。 tree命令作用:以树状图列出目录的内容,包括文件、子目录及子目录中的文件和目录等。 我们使用ll命令显示只能显示一个层级的普通文件和目录的名称。而使用tree则可以树的形式将指定…...
软件设计模式系列之九——桥接模式
1 模式的定义 桥接模式是一种结构型设计模式,它用于将抽象部分与其实现部分分离,以便它们可以独立地变化。这种模式涉及一个接口,它充当一个桥,使得具体类可以在不影响客户端代码的情况下改变。桥接模式将继承关系转化为组合关系…...
构造函数的调用规则
#include <iostream> #include <string> using namespace std; class person{ public:int m_age; // person(){ // cout<<"默认构造的调用"<<endl; // } // person(int age){ // m_ageage; // cout<<"有参构造的调用"<…...
第十章:枚举类与注解
10.1:枚举类的使用 当需要定义一组常量时,建议使用枚举类(前提:类的对象只有有限个,确定的) eg: 星期:Mondey、.....、Sunday 性别:Man、.....、Woman 线程状态ÿ…...
ChatGPT:字符串操作问题——提取包含括号的字符串中的题干内容
ChatGPT:字符串操作问题——提取包含括号的字符串中的题干内容 String title p.text().split(“(”)[0];为什么会报错 ChatGPT: 在这段代码中,您正在使用Java处理一个字符串(假设是HTML或文本),尝试将其分…...
jvm中对象创建、内存布局以及访问定位
对象创建 Java语言层面,创建对象通常(例外:复制、反序列化)仅仅是一个new关键字即可,而在虚拟机中,对象(限于普通Java对象,不包括数组和Class对象等)的创建又是怎样一个过…...
C基础-操作符详解
操作符分类: 算数操作符: - * / % //算数操作符 // int main() // { // // /除法 1.整数除法(除号两端都是整数) 2浮点数除法,除号的两端只要有一个小数就执行小数除法 // // 除法中,除数为0 // int a 7 / 2; /…...
时序预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测
时序预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测 目录 时序预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测。…...
【深度学习实验】线性模型(五):使用Pytorch实现线性模型:基于鸢尾花数据集,对模型进行评估(使用随机梯度下降优化器)
目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入库 1. 线性模型linear_model 2. 损失函数loss_function 3. 鸢尾花数据预处理 4. 初始化权重和偏置 5. 优化器 6. 迭代 7. 测试集预测 8. 实验结果评估 9. 完整代码 一、实验介…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
