C#的LINQ to XML 类中使用最多的三个类:XElement、XAttribute 和 XDocument
目录
一、XElement 类
1.使用 XElement 类创建一个 xml 文档
(1)示例源码
(2)xml文件
2.使用LINQ to SQL或者LINQ to Object获取数据源
(1)示例源码
(2)xml文件
3.XElement 类包含的其它方法
二、XAttribute 类
1.通过 XAttribute添加属性
(1)示例源码
(2)xml文件
2.使用Remove()删除属性
(1)示例源码
(2)xml文件
3.属性不是节点
(1)示例源码
(2)xml文件
三、XDocument 类
1.示例
2.生成显示
System.Xml.Linq 命名空间包含 LINQ to XML 的19个类。 LINQ to XML 是内存中的 XML 编程接口,使能轻松有效地修改 XML 文档。
微软在 LINQ 上投入了很大的精力,使我们在编程时感觉到很舒服。处理 XML 时使用最多的三个类:XElement、XAttribute 和 XDocument。
序号 | 类 | 说明 |
1 | Extensions | 包含 LINQ to XML 扩展方法。 |
2 | XAttribute | 表示 XML 特性。 |
3 | XCData | 表示包含 CDATA 的文本节点。 |
4 | XComment | 表示 XML 注释。 |
5 | XContainer | 表示可包含其他节点的节点。 |
6 | XDeclaration | 表示 XML 声明。 |
7 | XDocument | 表示 XML 文档。 有关 XDocument 对象的组件和用法,请参阅 XDocument Class Overview。 |
8 | XDocumentType | 表示 XML 文档类型定义 (DTD)。 |
9 | XElement | 表示一个 XML 元素。 有关用法信息和示例,请参阅本页的 XElement 类概述和“备注”部分。 |
10 | XName | 表示 XML 元素或属性的名称。 |
11 | XNamespace | 表示一个 XML 命名空间。 此类不能被继承。 |
12 | XNode | 表示 XML 树中节点的抽象概念(元素、注释、文档类型、处理指令或文本节点)。 |
13 | XNodeDocumentOrderComparer | 包含用于比较节点文档顺序的功能。 此类不能被继承。 |
14 | XNodeEqualityComparer | 比较节点以确定其是否相等。 此类不能被继承。 |
15 | XObject | 表示 XML 树中的节点或属性。 |
16 | XObjectChangeEventArgs | 提供有关 Changing 和 Changed 事件的数据。 |
17 | XProcessingInstruction | 表示 XML 处理指令。 |
18 | XStreamingElement | 表示 XML 树中支持流输出延迟的的元素。 |
19 | XText | 表示文本节点。 |
表格中列元素详解见超链接。
一、XElement 类
1.使用 XElement 类创建一个 xml 文档
(1)示例源码
//通过XElement创建XMLusing System.Xml.Linq;namespace _10_1
{class Program{static void Main(string[] args){ CreateCategories();#region 通过XElement创建XMLvoid CreateCategories(){string path = Directory.GetCurrentDirectory() + @"\People.xml";XElement root = new("Peoples",new XElement("People",new XElement("ID", Guid.NewGuid()),new XElement("Name", "王菲")),new XElement("People",new XElement("ID", Guid.NewGuid()),new XElement("Name", "谢霆锋")),new XElement("People",new XElement("ID", Guid.NewGuid()),new XElement("Name", "章子怡")),new XElement("People",new XElement("ID", Guid.NewGuid()),new XElement("Name", "汪峰")));root.Save(path);}#endregion 通过XElement创建XML}}
}
(2)xml文件
<Peoples><People><ID>9586dab0-28a4-465a-987d-5f1e89042154</ID><Name>王菲</Name></People><People><ID>7bf22551-7635-4768-bb12-d826ba0991d3</ID><Name>谢霆锋</CategoryName></People><People><ID>bcf1f65d-38f5-40f1-8ad7-eae9d7ee117e</ID><Name>章子怡</Name></People><People><ID>dc69f99b-b8cf-46c3-bba6-a23909a199cd</ID><Name>汪峰</Name></People>
</Peoples>
2.使用LINQ to SQL或者LINQ to Object获取数据源
LINQ to XML的强大之处还在于它可以使用LINQ to SQL或者LINQ to Object获取数据源,然后填充到xml树。
(1)示例源码
从 Northwind 数据库中读取 Categories、Products 表中的数据来创建包含产品类别,以及每
(2)xml文件
3.XElement 类包含的其它方法
XElement 类包含了许多方法,这些方法使得处理 xml 变得轻而易举。其中,Save、CreateReader、ToString 和 WriteTo 方法是比较常用的三个方法:
方法 | 参数 | 返回值 | 描述 |
CreateReader | 无 | System.Xml.XmlReader | 创建此节点的XmlReader |
Saye | System.String | void | 将此元素序列化为文件 |
System.I0.TextWriter | void | 将此元素序列化为TextWriter | |
System.Xml.XmlWriter | void | 将此元素序列化为XmlWriter | |
System.String, System.Xml.Linq.SaveOptions | void | 将此元素序列化为文件,并可以选择 禁用格式设置 | |
System.IO.TextWriter System.Xml.Linq.SaveOptions | void | 将此元素序列化为TextWriter,并可 以选择禁用格式设置 | |
WriteTo | System.Xml.XmlWriter | void | 将此元素写入XmlWriter |
ToString | 无 | System.String | 返回此节点的缩进XML |
System.Xml.Ling.SaveOptions | System.String | 返回此节点的XML,并可以选择禁用 格式设置 |
二、XAttribute 类
XAttribute 类用来处理元素的属性,属性是与元素相关联的“名称/值”对,每个元素中不能有名称重复的属性。使用 XAttribute 类与使用 XElement 类的操作十分相似。
XAttribute 类的方法比较少,常用的三个是:
方法 | 描述 |
AddAnnotation | 为该属性添加注解 |
Remove | 删除该属性 |
SetValue | 设定该属性的值 |
1.通过 XAttribute添加属性
(1)示例源码
//创建 xml 树时添加属性using System.Xml.Linq;namespace _10_1
{class Program{static void Main(string[] args){ CreateCategoriesByXAttribute();#region 创建 xml 树时添加属性XElement CreateCategoriesByXAttribute(){string path = Directory.GetCurrentDirectory() + @"\PeoplebyXAttribute.xml";XElement root = new("Peoples",new XElement("People",new XAttribute("ID", Guid.NewGuid()),new XElement("Name", "李小龙")),new XElement("People",new XAttribute("ID", Guid.NewGuid()),new XElement("Name", "李连杰")),new XElement("People",new XAttribute("ID", Guid.NewGuid()),new XElement("Name", "成龙")),new XElement("People",new XAttribute("ID", Guid.NewGuid()),new XElement("Name", "甄子丹")));root.Save(path);return root;}#endregion 创建 xml 树时添加属性}}
}
(2)xml文件
<Peoples><People ID="ed6b428c-a188-4503-870f-d4eea12c52c4"><Name>李小龙</Name></People><People ID="40cfdf39-a189-4963-a86d-e712978c4ae7"><Name>李连杰</Name></People><People ID="d3126eb3-5ede-46f3-90a7-b1d3eb5ef627"><Name>成龙</Name></People><People ID="6558808f-9ef6-4698-b05a-9747479a5238"><Name>甄子丹</Name></People>
</Peoples>
2.使用Remove()删除属性
使用 Remove 来删除第一个元素的ID 属性:
(1)示例源码
using System.IO;
using System.Xml.Linq;namespace _10_1
{class Program{static void Main(string[] args){ CreateCategoriesByXAttribute();RemoveAttribute();#region 创建 xml 树时添加属性XElement CreateCategoriesByXAttribute(){string path = Directory.GetCurrentDirectory() + @"\PeoplebyXAttribute.xml";XElement root = new("Peoples",new XElement("People",new XAttribute("ID", Guid.NewGuid()),new XElement("Name", "李小龙")),new XElement("People",new XAttribute("ID", Guid.NewGuid()),new XElement("Name", "李连杰")),new XElement("People",new XAttribute("ID", Guid.NewGuid()),new XElement("Name", "成龙")),new XElement("People",new XAttribute("ID", Guid.NewGuid()),new XElement("Name", "甄子丹")));root.Save(path);return root;}#endregion 创建 xml 树时添加属性#region 删除属性void RemoveAttribute(){string path = Directory.GetCurrentDirectory() + @"\XAttributeRemove.xml";XElement _xdoc = CreateCategoriesByXAttribute();XAttribute _attribute = _xdoc.Element("People").Attribute("ID");_attribute.Remove();_xdoc.Save(path); }# endregion 删除属性}}
}
(2)xml文件
利用Element属性和Remove()方法删除第一条记录“ID”属性
<Peoples><People><Name>李小龙</Name></People><People ID="3c5d27ca-f84d-4066-b721-cfdaeee7a90b"><Name>李连杰</Name></People><People ID="dc592933-0911-4107-bc0c-ea82563781bd"><Name>成龙</Name></People><People ID="69559674-b035-4bb6-be3a-22d9b7838a45"><Name>甄子丹</Name></People>
</Peoples>
3.属性不是节点
XAttribute 可以构造的对象与 XElement 构造的对象一致。但属性与元素之间是有些区别的。 XAttribute 对象不是 XML 树中的节点。 它们是与 XML 元素关联的名称/值对。 与文档对象模型 (DOM) 相比,这更加贴切地反映了 XML 结构。 虽然 XAttribute 对象实际上不是 XML 树的节点,但使用 XAttribute 对象与使用 XElement 对象非常相似。
(1)示例源码
using System.IO;
using System.Xml.Linq;namespace _10_1
{class Program{static void Main(string[] args){ CreateByXAttribute();#region 通过属性创建不是节点void CreateByXAttribute(){string path = Directory.GetCurrentDirectory() + @"\CreateByXAttribute.xml";XElement _c = new("Customers",new XElement("Customer",new XElement("Name", "John Doe"),new XElement("PhoneNumbers",new XElement("Phone",new XAttribute("type", "home"),"555-555-5555"),new XElement("Phone",new XAttribute("type", "work"),"666-666-6666")) // PhoneNumbers) // Customer); // CustomersConsole.WriteLine(_c);_c.Save(path);#endregion 通过属性创建不是节点}}}
}
(2)xml文件
<Customers><Customer><Name>John Doe</Name><PhoneNumbers><Phone type="home">555-555-5555</Phone><Phone type="work">666-666-6666</Phone></PhoneNumbers></Customer>
</Customers>
三、XDocument 类
对象 | 个数 | 说明 |
XDeclaration | 一个 | 用于指定 xml 声明中的重要组成部分,如文档编码和版本等 |
XElement | 一个 | 指定文档的根元素 |
XDocumentType | 一个 | 表示一个 xml DTD |
XComment | 多个 | Xml 注释,将与根元素同级。 |
XProcessingInstruction | 多个 | 为处理 xml 的应用程序指定任何所需信息 |
1.示例
using System.Xml.Linq;namespace _10_1
{class Program{static void Main(string[] args){ CreateXmlByXDocument();#region 通过XDocument创建XMLvoid CreateXmlByXDocument(){string path = Directory.GetCurrentDirectory() + @"\CreateXmlByXDocument.xml";XDocument _doc = new(new XComment("This is a comment."),new XProcessingInstruction("xml-stylesheet", "href='mystyle.css' title='Compact' type='text/css'"),new XElement("Pubs",new XElement("Book",new XElement("Title", "Artifacts of Roman Civilization"),new XElement("Author", "Moreno, Jordao")), //Booknew XElement("Book",new XElement("Title", "Midieval Tools and Implements"),new XElement("Author", "Gazit, Inbar")) //Book), //Pubsnew XComment("This is another comment.")){Declaration = new XDeclaration("1.0", "utf-8", "true")}; //newConsole.WriteLine(_doc);_doc.Save(path);}#endregion 通过XDocument创建XML}}
}
2.生成显示
<!--This is a comment.-->
<?xml-stylesheet href='mystyle.css' title='Compact' type='text/css'?>
<Pubs><Book><Title>Artifacts of Roman Civilization</Title><Author>Moreno, Jordao</Author></Book><Book><Title>Midieval Tools and Implements</Title><Author>Gazit, Inbar</Author></Book>
</Pubs>
<!--This is another comment.-->
using System.IO;
using System.Xml.Linq;namespace _10_1
{class Program{static void Main(string[] args){ ReturnNodesAfterSelf();#region ReturnNodesAfterSelf()void ReturnNodesAfterSelf(){XElement root = new("Categories",new XElement("Category",new XElement("CategoryID", Guid.NewGuid()),new XElement("CategoryName", "食品"),new XElement("Description", "可以吃的东西")) //Category); //Categoriesforeach (var item in root.Element("Category").Element("CategoryID").NodesAfterSelf()){Console.WriteLine((item as XElement).Value);}}#endregion ReturnNodesAfterSelf()}}
}
//运行结果:
//食品
//可以吃的东西
相关文章:
C#的LINQ to XML 类中使用最多的三个类:XElement、XAttribute 和 XDocument
目录 一、XElement 类 1.使用 XElement 类创建一个 xml 文档 (1)示例源码 (2)xml文件 2.使用LINQ to SQL或者LINQ to Object获取数据源 (1)示例源码 (2)xml文件 3.XElement …...

2023软考-系统架构师一日游
上周六(11月4号)参见了软考,报的系统架构师,今年下半年是第一次推行机考,简单来分享下大致流程,至于考试难度、考点什么的,这个网上有很多专门研究这些的机构,本人无权发言。考试的经…...

维乐 Prevail Glide带你做破风王者,无阻前行!
对于自行车骑手来说,需要应对的问题有很多,其中最大的问题之一,就是「风阻」。风阻永远都是你越反抗越强,因此为了克服风阻的力量,时间久了,身体自然会造成一定程度的损伤。如何才能调整前行的步伐…...

企业通配符SSL证书的特点
企业通配符SSL证书是一种数字证书,其可以用于保护多个企业网站,对网站传输信息进行加密服务。这种证书通常适用于拥有多个子域名或二级域名的企事业单位。今天就随SSL盾小编了解企业通配符SSL证书的相关信息。 1. 保护所有域名和子域名:企业通…...
1.2 HTML5
一.HTML5 简介 1.什么是HTML5 HTML5是新一代的 HTML 标准,2014年10月由万维网联盟( W3C)完成标准制定。官网地址: w3c提供:HTML StandardWHATWG提供: HTML Standard HTML5在狭义上是指新—代的 HTML 标准,在广义上是指:整个前端。 2.HTML…...

一个例子!教您彻底理解索引的最左匹配原则!
最左匹配原则的定义 简单来讲:在联合索引中,只有左边的字段被用到,右边的才能够被使用到。我们在建联合索引的时候,区分度最高的在最左边。 简单的例子 创建一个表 CREATE TABLE user ( id INT NOT NULL AUTO_INCREMENT, code…...

Docker容器技术实战4
11、docker安全 proc未被隔离,所以在容器内和宿主机上看到的东西是一样的 容器资源控制 cpu资源限制 top命令,查看cpu使用率 ctrlpq防止退出回收,容器会直接调用cgroup,自动创建容器id的目录 cpu优先级设定 测试时只保留一个cpu…...

vue3中使用better-scroll
文章目录 需求分析安装htmlcssjs 需求分析 假设现在有这么一个需求,页面顶部有几个tabs导航,每一个tab下都有一个可以滑动的切换按钮。咱们就可以引入better-scroll来实现这个需求。 安装 首先下载better-scroll npm install better-scroll/core --…...
RK3568禁用调试口改成普通口
RK3568共10个串口,需要用到8个串口,无耐其他UART都被外设复用了,只好将调试口也拿出来作为普通口,方法:禁用调试口、增加UART2 1. vi kernel/arch/arm64/boot/dts/rockchip/OK3568-C-linux.dts 2. #include &quo…...

腾讯云CVM服务器标准型S5、SA3、S6详细介绍
腾讯云CVM服务器标准型实例的各项性能参数平衡,标准型云服务器适用于大多数常规业务,例如:web网站及中间件等,常见的标准型云服务器有CVM标准型S5、S6、SA3、SR1、S5se等规格,腾讯云服务器网txyfwq.com来详细说下云服务…...

【PC电脑windows环境下-[jetson-orin-NX]Linux环境下-下载工具esptool工具使用-相关细节-简单样例-实际操作】
【PC电脑windows环境下-[jetson-orin-NX]Linux环境下-下载工具esptool工具使用-相关细节-简单样例-实际操作】 1、概述2、实验环境3、 物品说明4-2、自我总结5、本次实验说明1、准备样例2、设置芯片3、编译4、下载5、验证 (1)windows环境下进行烧写1、下…...
什么是flink
flink的起源 Flink的起源可以追溯到2010年,当时它作为一个研究项目开始。该项目最初由德国柏林工业大学(Berlin Institute of Technology)的一群研究人员发起,包括Matei Zaharia、Kostas Tzoumas和Stephan Ewen等。 项目最初被称为…...

基于 VTable 的多维数据展示的原理与实践
多维表格介绍 多维表格又名透视表、交叉表、Pivot Table,指的是可以在行维度和列维度放入一个或多个维度,显示维度之间相互关系的一种表格。用户可以一目了然地分析出各种场景指标以及对比,旨在帮助业务分析推动决策。 假设需要分析如下表格…...

为什么有了MAC地址,还需要IP地址?
解释 搞懂这个问题,首先需要了解交换机的功能 交换机内部有一张MAC地址映射表,记录着MAC地址和端口的对应关系。 如果A要给B发送一个数据包,构造如下格式的数据结构: 到达交换机时,交换机内部通过自己维护的 MAC 地…...

Eclipse开发环境的安装与配置
Eclipse开发环境的安装与配置 1.Eclipse安装与配置 1.将JDK与Eclipse这两个软件安装包放在一个文件夹下,方便之后安装使用。 2.安装JDK 在D:LeStoreDownload\java文件夹下另外新建三个文件夹分别命名为java、jdk和eclipse(分别用于Java、j…...

《006.Springboot+vue之旅游信息推荐系统》【有文档】
《006.Springbootvue之旅游信息推荐系统》【有文档】 项目简介 [1]本系统涉及到的技术主要如下: 推荐环境配置:DEA jdk1.8 Maven MySQL 前后端分离; 后台:SpringBootMybatis; 前台:vueElementUI; [2]功能模块展示: …...

LangChain+LLM实战---使用知识图谱和大模型来实现多跳问答
原文:Knowledge Graphs & LLMs: Multi-Hop Question Answering 可以使用检索增强方法来克服大型语言模型(Large Language Models, llm)的局限性,比如幻觉和有限的知识。检索增强方法背后的思想是在提问时引用外部数据,并将其提供给LLM&a…...

【实践篇】一次Paas化热部署实践分享 | 京东云技术团队
前言 本文是早些年,Paas化刚刚提出不久时,基于部门内第一次Paas化热部署落地经验所写,主要内容是如何构建一些热部署代码以及一些避雷经验。 一、设计-领域模型设计 1.首先,确定领域服务所属的领域 2.其次,确定垂直…...
蓝桥杯官网填空题(算式问题)
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 看这个算式: ☆☆☆ ☆☆☆ ☆☆☆ 如果每个五角星代表 1 ~ 9 的不同的数字。 这个算式有多少种可能的正确填写方法? 173 286 459 …...

Verilog HDL语言基础知识
目录 Verilog HDL语言基础知识 6.1.2 Verilog HDL模块的结构 6.1.3 逻辑功能定义 6.2.1 常量 6.3 运算符及表达式 6.4.2 条件语句 Verilog HDL语言基础知识 先来看两个Verilog HDL程序。 例6.1 一个8位全加器的 Verilog HDL源代码 module adder8(cout,sum,ina,…...

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 如果用户登录尝试失败次…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
Python实现简单音频数据压缩与解压算法
Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中,压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言,提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...

链式法则中 复合函数的推导路径 多变量“信息传递路径”
非常好,我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题,统一使用 二重复合函数: z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y)) 来全面说明。我们会展示其全微分形式(偏导…...
boost::filesystem::path文件路径使用详解和示例
boost::filesystem::path 是 Boost 库中用于跨平台操作文件路径的类,封装了路径的拼接、分割、提取、判断等常用功能。下面是对它的使用详解,包括常用接口与完整示例。 1. 引入头文件与命名空间 #include <boost/filesystem.hpp> namespace fs b…...