XML的基础知识及XMl文件的创建/读取/更新demo详解

1.什么是xml?

Xml(Extensible Markup Language),可扩展标记语言,一种用于存储数据或传输数据的标记语言,由万维网(W3C开发)。它允许开发人员创建自己的标记,且简单易读,易扩展,支持标准的字符编码,如UFT-8,UTF-16.

2. Xml文档的基本结构

2.1文档声明,包括文档版本(version)、编码格式(encoding).

<?xml version = “1.0”,encoding = “UTF-8”?>

2.2根元素(root element)

Xml文档必须包含一个根元素,其是xml文档所有元素的父元素,如:

<root>

  <!--其他元素-->

</root>

2.3元素(element)

是xml文档的基本单位,包含文本和属性,元素用标签来标识,由<p>开始,</p>结束,如:

<p>这是一个段落</p>

2.4属性(property)

属性是元素的附加信息,属性在开始标签中定义,并以键值对的形式出现.如:

<p link = “www.baidu.com”这是一个链接/p>

2.5注释(Comment)

注释用于在xml文档中添加解释和说明,格式以<!--开始,以-->, 如下:

<!--这是我的注释-->

3.C#对xml文档的抽象

C#对xml文件进行了结构的抽象,支持xml文档的创建、读、写等操作.

3.1 xml文档被抽象成XmlDocument对象,Xml文档对象可以用XmlReader和XmlWriter类对xml文件对象进行读写

3.2 xml文档的元素

被抽象为XmlElement对象,这些对象包含了元素的名称,属性,子元素

3.3 xml文档的属性

XmlAttribute包含了元素的属性名称和值

3.4Xml文档的文本内容

XmlText对象访问文本内容

3.5xml节点处理

XmlNodelist,XmlNodeReader,XmlNodeWriter,用于xml文档的节点列表,读取,写入xml节点.

以上的类都在System.Xml命名空间下,需要引入.

4.创建xml文件的demo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;namespace _1.创建xml
{class Program{static void Main(string[] args){XmlDocument doc = new XmlDocument();//定义xml声明信息XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "UTF-8", null);//xml声明信息添加到文档对象下doc.AppendChild(dec);//给xml文档声明行添加注释doc.AppendChild(doc.CreateComment("line above is the declaration for the xml document"));//创建根元素的注释XmlNode com = doc.CreateComment("line below is the root element");doc.AppendChild(com);//创建根节点XmlElement root = doc.CreateElement("Root");//将创建的Root元素添加到xml文档的根节点中doc.AppendChild(root);//循环添加多个结构相同的节点int subnodeCnt = 6;//定义随机数对象,用于产生年龄Random rdm = new Random();for (int i = 0; i < subnodeCnt; i++){//创建当前元素的注释XmlComment comment =  doc.CreateComment($"这是第{i + 1}个子节点");//将注释添加到root下面root.AppendChild(comment);//创建当前元素XmlElement element = doc.CreateElement($"学生{i + 1}");//给当前元素添加属性,如果当前元素没有ID属性,则添加ID属性;如果当前元素有ID属性,则更新ID属性的值element.SetAttribute("ID", $"{i + 100}");//给当前元素添加子元素,描述学生姓名信息XmlElement name = doc.CreateElement("name");name.InnerText = $"学生{i+1}";element.AppendChild(name);//给当前元素添加子节点,描述学生的年龄信息XmlElement age = doc.CreateElement("Age");age.InnerText = $"{rdm.Next(12, 19)}";element.AppendChild(age);//创建当前元素到根目录下root.AppendChild(element);}doc.Save(@"D:\dwang\myxml.xml");}}
}

.5.读取xml文档demo

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;namespace _2.读取x_m_l
{class Program{static void Main(string[] args){int i = 1;string path = $@"D:\dwang\myxml{i}.xml";XmlDocument doc = new XmlDocument();doc.Load(path);//获取根节点XmlElement root = doc.DocumentElement;//获取子节点(XmlNode是xmlElement,xmlComment的父类)foreach (XmlNode student in root.ChildNodes){//忽略xml文件中的注释节点(XmlComment)if (student as XmlElement == null)continue;Console.Write($"{student.Name}--{((XmlElement)student).GetAttribute("name")}");foreach (XmlElement subnode in student.ChildNodes){Console.Write($"--{subnode.Name}--{subnode.InnerText}");}Console.Write("\r\n");}Console.ReadKey();}}
}

6.修改xml文档的demo,包括更新节点,添加节点,删除节点等.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace _3.修改xml
{class Program{static void Main(string[] args){//添加节点,修改节点,删除节点XmlDocument doc = new XmlDocument();//加载xml文档string path = $@"D:\dwang\myxml1.xml";doc.Load(path);//获取根节点XmlElement root = doc.DocumentElement;//获取根节点名称string name_RootNode = root.Name;//添加节点XmlElement newStudent = doc.CreateElement("newStuent");//设置newStuent元素的属性newStudent.SetAttribute("ID", "888");//添加newStuent元素的子节点name,ageXmlElement name = doc.CreateElement("name");name.InnerText = "newstuentName";newStudent.AppendChild(name);XmlElement age = doc.CreateElement("age");age.InnerText = "68";newStudent.AppendChild(age);//将新学生元素添加到根节点最后一个子元素后面root.InsertAfter(newStudent, root.ChildNodes[root.ChildNodes.Count-1]);//删除指定的节点两种常用方式(XPath)//删除指定的节点两种常用方式(XPath)//方式1XmlNode node1 = doc.SelectSingleNode(@"/Root/学生1");//注意节点的大小写,否则会找不到节点XmlNode node1_parent = node1?.ParentNode;node1_parent?.RemoveChild(node1);//获取指定的节点后,要用该节点的父节点对象删除该节点//方式2XmlNode node = root.SelectSingleNode("//学生2");if(node != null)root?.RemoveChild(node);//更新xml节点信息//获取指定节点元素XmlElement student3 = doc.SelectSingleNode(@"/Root/学生3") as XmlElement;//更新ID属性值student3?.SetAttribute("ID", "000001");//设置当前节点的指定子节点的innerTextif (student3 != null){student3["Age"].InnerText = "28";student3["name"].InnerText = "Student--3";}//保存xml文档doc.Save(path);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/787167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

游戏APP如何提高广告变现收益的同时,保证用户留存率?

APP广告变现对接第三方聚合广告平台主要通过SDK文档对接&#xff0c;一些媒体APP不具备专业运营广告变现的对接能力和资源沉淀&#xff0c;导致APP被封控&#xff0c;设置列入黑名单&#xff0c;借助第三方聚合广告平台进行商业化变现是最佳选择。#APP广告变现# 接入第三方平台…

【前端基础】使用 typeof 进行类型判断注意点

在使用typeof进行类型判断时&#xff0c;需要注意以下几点&#xff1a; 基本数据类型判断&#xff1a;typeof可以用于判断基本数据类型&#xff0c;包括"undefined", "boolean", "number", "string", "bigint", "symb…

EasyDarwin 、ffmpeg 音视频推流拉流;OBS视频推理软件、obs-rtspserver服务器;python读取rtsp流

参考&#xff1a;https://blog.csdn.net/N71FS1/article/details/130019563 一、EasyDarwin ffmpeg ffmpeg 推送音视频流到rtsp流服务器 EasyDarwin 作为rtsp流服务器 &#xff08;下载&#xff1a;https://www.easydarwin.org/p/easydarwin.html&#xff09;OBS 直播音视频录…

分享:搭建企微知识库简单易学步骤

说起企微知识库&#xff0c;可能有些人还不太清楚&#xff0c;为什么现在很懂企业选择搭建企微知识库&#xff1f;其实&#xff0c;企微知识库就是一个装满了企业的各种知识、经验和资料的载体。目的是为了方便员工随时查找和学习、有助于知识的传承和共享、加强团队协作和沟通…

专题三_二分查找(2)

目录 35. 搜索插入位置 解析 题解 852. 山脉数组的峰顶索引 解析 题解 162. 寻找峰值 解析 题解 35. 搜索插入位置 35. 搜索插入位置 - 力扣&#xff08;LeetCode&#xff09; 解析 题解 class Solution { public:int searchInsert(vector<int>& nums, int…

MS SQL Server STUFF 函数实战 统计记录行转为列显示

目录 范例运行环境 视图样本设计 数据统计要求 STUFF函数实现 小结 范例运行环境 操作系统&#xff1a; Windows Server 2019 DataCenter 数据库&#xff1a;Microsoft SQL Server 2016 视图样本设计 假设某一视图 [v_pj_rep1_lname_score] 可查询对某一被评价人的绩效…

重生奇迹mu召唤技能

1、召唤师与法师的共通技能&#xff1a;火球术、真空波、陨石、冰封。 2、摄魂咒&#xff1a;夺取敌人的体力来补充自己的体力。 3、链雷咒&#xff1a;雷系列的技能&#xff0c;给予敌人连锁3次的雷电攻击&#xff0c;如果目标附近没有其他目标&#xff0c;就会攻击第一个对…

密码学基础古典密码

古典密码学有两种基本方法&#xff0c;置换密码和替代密码&#xff0c;置换密码指的是&#xff0c;密文和明文的字母是一样的&#xff0c;只是顺序不一样而已&#xff0c;而替代密码指的是&#xff0c;有一张对应的表&#xff0c;将明文中的字符替换成另一个字符。达到生成密文…

手撕算法-有效的括号

描述 分析 使用栈&#xff0c;如果是左括号&#xff0c;入栈&#xff0c;如果是右括号&#xff0c;判断栈是否为空&#xff0c;不是空出栈并校验是否匹配&#xff0c;不匹配返回false。最后如果栈为空&#xff0c;返回true。 代码 class Solution {public boolean isValid(…

朵米3.5客服系统源码,附带系统搭建教程

朵米客服系统是一款全功能的客户服务解决方案&#xff0c;提供多渠道支持&#xff08;如在线聊天、邮件、电话等&#xff09;&#xff0c;帮助企业建立与客户的实时互动。该系统具有智能分流功能&#xff0c;可以快速将客户请求分配给适当的客服人员&#xff0c;提高工作效率。…

【网课必备】学浪视频下载到本地

学浪作为知识付费平台&#xff0c;拥有大量的课程&#xff0c;所以很多人在学浪上购买自己的课程&#xff0c;但是学浪官方没有提供下载选项&#xff0c;只可以在学浪客户端软件观看&#xff0c;并不是很方便 于是为了解决这一个需求&#xff0c;小白老师s开发了学浪视频下载到…

凌乱的yyy / 线段覆盖

题源 先将每一场比赛以结束时间排一次序&#xff0c;存储当前满足比赛的结束时间&#xff0c;将前面比赛结束时间与后面比赛开始比较&#xff0c;在这相同结束时间比赛中下&#xff0c;如果有比赛的开始时间小于等于记录的结束时间&#xff0c;就可以计数加一~~~ 题目描述 现在…

Three.js真实相机模拟

有没有想过如何在 3D Web 应用程序中模拟物理相机&#xff1f; 在这篇博文中&#xff0c;我将向你展示如何使用 Three.js和 OpenCV 来完成此操作。 我们将从模拟针孔相机模型开始&#xff0c;然后添加真实的镜头畸变。 具体来说&#xff0c;我们将仔细研究 OpenCV 的两个失真模…

C语言第三十八弹---编译和链接

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 编译和链接 1、翻译环境和运行环境 2、翻译环境 2.1、预处理&#xff08;预编译&#xff09; 2.2、编译 2.2.1、词法分析 2.2.2、语法分析 2.2.3、语义分…

Java从萌新小白到顶级大牛(4更新中)

自定义异常 Java标准库定义的常用异常包括&#xff1a; Exception │ ├─ RuntimeException │ │ │ ├─ NullPointerException │ │ │ ├─ IndexOutOfBoundsException │ │ │ ├─ SecurityException │ │ │ └─ IllegalArgumentException │ │ │ …

共享WiFi项目加盟怎么做?碰到这些服务商要留意!

自2014年共享WiFi项目被微火研发出来让大众都可以参与其中&#xff0c;市场上不少合作伙伴都发现了该项目市场缺口大、推广难度低及落地性强等优势&#xff0c;想要加盟共享wifi项目。从目前的情况来看&#xff0c;不少代理商虽然对这个项目本身有一定的了解&#xff0c;但是靠…

扫地机器人(蓝桥杯)

文章目录 扫地机器人题目描述解题思路二分贪心 扫地机器人 题目描述 小明公司的办公区有一条长长的走廊&#xff0c;由 N 个方格区域组成&#xff0c;如下图所 示。 走廊内部署了 K 台扫地机器人&#xff0c;其中第 i 台在第 Ai 个方格区域中。已知扫地机器人每分钟可以移动…

Transformer模型-用jupyter演示逐步计算attention

学习transformer模型-用jupyter演示如何计算attention&#xff0c;不含multi-head attention&#xff0c;但包括权重矩阵W。 input embedding&#xff1a;文本嵌入 每个字符用长度为5的向量表示&#xff1a; 注意力公式&#xff1a; 1&#xff0c;准备Q K V&#xff1a; 先 生…

Android 9.0 Launcher3定制化之修改添加的默认文件夹为9宫格样式

1.前言 在9.0的系统产品rom定制化开发中,对于Launcher3的定制功能也是不少的,比如在Launcher3中添加默认文件夹,把默认的app添加的文件夹里面,其他的app 然后按顺序排序。在文件夹布局就是默认的9宫格布局,接下来分析下相关源码来实现功能 2.Launcher3定制化之修改添加的…

漏洞扫描神器:Netsparker 保姆级教程(附链接)

一、介绍 Netsparker是一款专业的网络安全扫描工具&#xff0c;用于自动化地发现和修复网站和Web应用程序中的安全漏洞。它提供了全面的安全测试&#xff0c;包括SQL注入、跨站脚本攻击、远程文件包含、命令注入等常见的安全漏洞。 Netsparker具有以下特点&#xff1a; 自动化…