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 时使用最多的三个类:XElementXAttribute XDocument

序号说明
1Extensions包含 LINQ to XML 扩展方法。
2XAttribute表示 XML 特性。
3XCData表示包含 CDATA 的文本节点。
4XComment表示 XML 注释。
5XContainer表示可包含其他节点的节点。
6XDeclaration表示 XML 声明。
7XDocument表示 XML 文档。 有关 XDocument 对象的组件和用法,请参阅 XDocument Class Overview。
8XDocumentType表示 XML 文档类型定义 (DTD)。
9XElement表示一个 XML 元素。 有关用法信息和示例,请参阅本页的 XElement 类概述和“备注”部分。
10XName表示 XML 元素或属性的名称。
11XNamespace表示一个 XML 命名空间。 此类不能被继承。
12XNode表示 XML 树中节点的抽象概念(元素、注释、文档类型、处理指令或文本节点)。
13XNodeDocumentOrderComparer包含用于比较节点文档顺序的功能。 此类不能被继承。
14XNodeEqualityComparer比较节点以确定其是否相等。 此类不能被继承。
15XObject表示 XML 树中的节点或属性。
16XObjectChangeEventArgs提供有关 Changing 和 Changed 事件的数据。
17XProcessingInstruction表示 XML 处理指令。
18XStreamingElement表示 XML 树中支持流输出延迟的的元素。
19XText表示文本节点。

        表格中列元素详解见超链接。

一、XElement 类

        XElement 类是 LINQ to XML 中的基础类之一。 它表示一个 XML 元素。 可以使用该类创建元素;更改元素内容;添加、更改或删除子元素;向元素中添加属性;或以文本格式序列化元素内容。 还可以与System.Xml 中的其他类(例如 XmlReader、XmlWriter 和XslCompiledTransform)进行互操作。
        使用 LINQ to XML 创建 xml 文档有很多种方式,具体使用哪种方法要根据实际需要。而创建 xml 文档最简单、最常见的方式是使用 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 数据库中读取 CategoriesProducts 表中的数据来创建包含产品类别,以及每

个类别下所有产品的 xml 文件。

(2)xml文件

3.XElement 类包含的其它方法

        XElement 类包含了许多方法,这些方法使得处理 xml 变得轻而易举。其中,SaveCreateReaderToString WriteTo 方法是比较常用的三个方法:

方法参数返回值描述
CreateReaderSystem.Xml.XmlReader创建此节点的XmlReader
SayeSystem.Stringvoid将此元素序列化为文件
System.I0.TextWritervoid将此元素序列化为TextWriter
System.Xml.XmlWritervoid将此元素序列化为XmlWriter
System.String,
System.Xml.Linq.SaveOptions
void将此元素序列化为文件,并可以选择
禁用格式设置
System.IO.TextWriter
System.Xml.Linq.SaveOptions
void将此元素序列化为TextWriter,并可
以选择禁用格式设置
WriteToSystem.Xml.XmlWritervoid将此元素写入XmlWriter
ToStringSystem.String返回此节点的缩进XML
System.Xml.Ling.SaveOptionsSystem.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  

        XDocument 类提供了处理 xml 文档的方法,包括声明、注释和处理指令。一个 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.-->
        XDocument 类包含多个与 XElement 类相同的方法。 处理节点和元素的大部分功能都可以通过 XElement 获得,只有当绝对需要文档层次的处理能力,以及需要访问注释、处理指令和声明时,才有使用 XDocument 类的必要。
        创建了 xml 文档后,可以使用 NodesAfterSelf 方法返回指定的 XElement 元素之后的所有同级元素。需要注意的是 此方法只包括返回集合中的同级元素,而不包括子代 。 
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()}} 
}
//运行结果:
//食品
//可以吃的东西

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

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

相关文章

vector模拟实现

vector的模拟实现 一. vector的模拟实现1.0 与string的区别1.1 实现内容实现方法 二. vector模拟中重点讲解内容&#xff08;坑&#xff09;2.1 erase的使用问题2.2 resize的特殊写法2.3 operator 2.4 reserve 三. 整体代码 一. vector的模拟实现 我们知道&#xff1a; 在STL中…

第十六章 ObjectScript 翻译表

文章目录 第十六章 ObjectScript 翻译表 介绍表格列表RAWSAMEHTMLJS or JSMLJSON or JSONMLURIURLUTF8XML 其他表 第十六章 ObjectScript 翻译表 IRIS 使用转换表&#xff08;也称为 I/O 表&#xff09;来完成字符转换任务。某些 API 调用&#xff08;以及 $zconvert 函数&…

iPhoto照片垃圾清理工具CleanMyMacX2024

CleanMyMacX的照片垃圾清理功能会浏览您的iPhoto图片库&#xff0c;找到那些经过裁剪、调整大小、旋转或者其他编辑之后不再需要的但仍被iPhoto保存的原始图片副本。这些副本是隐藏的&#xff0c;但是它们却极大的增加了图片库的大小。 CleanMyMac X全新版下载如下: https://…

淘宝APP原数据如何获取??

随着中国互联网的快速发展&#xff0c;淘宝APP已成为了人们购物必备的应用程序之一。作为中国最大的在线购物平台之一&#xff0c;淘宝APP每天都会生成海量的交易数据&#xff0c;这些数据对分析消费者行为、预测市场趋势和优化商家运营都非常重要。因此&#xff0c;淘宝APP数据…

揭秘ChatGPT的智慧密码:向量数据库的神奇作用解析

2023年8月&#xff0c;亚马逊云科技推出了自己的向量引擎Amazon OpenSearch Serverless向量引擎&#xff0c;这被认为是其旗下大语言模型Amazon Titan超越ChatGPT的一个重要契机。 那么&#xff0c;这个Amazon OpenSearch Serverless向量引擎有何厉害之处&#xff1f;为什么能…

小程序和APP的区别|软件定制开发|网站搭建

小程序和APP的区别|软件定制开发|网站搭建 随着移动互联网的快速发展&#xff0c;小程序和APP成为人们日常生活中不可或缺的应用程序。然而&#xff0c;许多用户常常混淆它们之间的区别&#xff0c;本文将就两者进行对比&#xff0c;以帮助读者更好地理解它们的优势和适用场景…

Android 应用工具类

✍️作者简介&#xff1a;沫小北/码农小北&#xff08;专注于Android、Web、TCP/IP等技术方向&#xff09; &#x1f433;博客主页&#xff1a;沫小北/码农小北 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN &#x1f514;如果文章对您有一定的帮助请&…

labelme2coco.py 脚本增强

前言 最近在做一个实例分割的项目&#xff0c;用使用 Segment anything 的脚本先处理一遍图片&#xff0c;然后用labelme人工审核和调整。&#xff08;labelme 新版本已经加入了 Segment anything&#xff0c;可以AI 抠图&#xff0c;可惜用的是onnxruntime&#xff0c;于是我…

好用的MybatisX插件~

MybatisX插件&#xff1a; MyBatis-Plus为我们提供了强大的mapper和service模板&#xff0c;能够大大的提高开发效率。但是在真正开发过程中&#xff0c;MyBatis-Plus并不能为我们解决所有问题&#xff0c;例如一些复杂的SQL&#xff0c;多表联查&#xff0c;我们就需要自己去…

CentOS 7上创建Python 3虚拟环境

在CentOS 7上创建Python 3虚拟环境可以使用virtualenv包。以下是创建Python 3虚拟环境的步骤&#xff1a; 确保已经安装了Python 3和pip。可以通过在终端中运行以下命令来检查它们是否已安装&#xff1a; python3 --version pip3 --version如果未安装&#xff0c;请使用以下…

二十、泛型(1)

本章概要 基本概念 与 C 的比较 简单泛型 一个元组类库一个堆栈类RandomList 基本概念 普通的类和方法只能使用特定的类型&#xff1a;基本数据类型或类类型。如果编写的代码需要应用于多种类型&#xff0c;这种严苛的限制对代码的束缚就会很大。 多态是一种面向对象思想的泛…

2-爬虫-代理池搭建、代理池使用(搭建django后端测试)、爬取某视频网站、爬取某视频网站、bs4介绍和遍历文档树

1 代理池搭建 2 代理池使用 2.1 搭建django后端测试 3 爬取某视频网站 4爬取某视频网站 5 bs4介绍和遍历文档树 1 代理池搭建 # ip代理-每个设备都会有自己的IP地址-电脑有ip地址---》访问一个网站---》访问太频繁---》封ip-收费&#xff1a;靠谱稳定--提供api-免费&#xff…

一键同步chromedriver版本

ChromeDriver是一个控制Chrome浏览器的驱动程序&#xff0c;它和Selenium一起被广泛用于Web自动化测试。然而&#xff0c;随着Chrome版本的升级&#xff0c;我们需要不断更新ChromeDriver以保持其与Chrome的兼容性。这个过程既费时又繁琐&#xff0c;而且对于非技术人员来说可能…

Framebuffer 介绍和应用编程

前言&#xff1a; 使用的开发板为韦东山老师的 IMX6ULL 目录 Framebuffer介绍 LCD 操作原理 涉及的 API 函数 1.open 函数 2.ioctl 函数 3.mmap 函数 Framebuffer 程序分析 1.打开设备 2.获取 LCD 参数 3.映射 Framebuffer 4.描点函数 5.随便画几个点 6.上机实验…

RPC 原理详解

文章目录 什么是 RPCRPC 基本原理RPC核心功能服务寻址数据编解码网络传输一次RPC的调用过程 实践基于HTTP协议的RPC基于TCP协议的RPC 什么是 RPC RPC&#xff08;Remote Procedure Call&#xff09;&#xff0c;即远程过程调用&#xff0c;它允许像调用本地服务一样调用远程服…

DC电源模块隔离电路的影响

BOSHIDA DC电源模块隔离电路的影响 DC电源模块隔离电路是电子设备中常用的一种电路。它的作用是在设备中两个电路之间建立一定的隔离&#xff0c;以保证两个电路之间不会传递电流或信号。这种隔离电路的影响可以从以下几个方面来分析。 首先&#xff0c;隔离电路可以提高安全性…

rust 泛型和特征

特征 Trait 定义特征 如果不同的类型具有相同的行为&#xff0c;那么我们就可以定义一个特征&#xff0c;然后为这些类型实现该特征。定义特征是把一些方法组合在一起&#xff0c;目的是定义一个实现某些目标所必需的行为的集合。 例如&#xff0c;我们现在有文章 Post 和微…

Linux个性化登录提示信息

在Linux系统中&#xff0c;您可以为每个用户登录后显示个性化的提示信息。这通常通过修改用户的shell配置文件来实现&#xff0c;这个文件通常是用户的.bashrc或.bash_profile文件。以下是一些示例步骤&#xff0c;来实现这个目标&#xff1a; 打开终端并登录到Linux系统。 使…

第68讲:MySQL触发器的核心概念以及常见的触发类型应用案例

文章目录 1.触发器的概念2.触发器操作的语法结构3.各类触发器的典型应用案例3.1.需求描述以及实现思路3.2.创建日志表3.3.INSERT类型的触发器3.4.UPDATE类型的触发器3.5.DELETE类型的触发器 1.触发器的概念 触发器是与表中数据相关的数据库对象&#xff0c;当表中的数据产生in…

完美解决RuntimeError: expected scalar type Long but found Float

文章目录 一、错误解释RuntimeError: expected scalar type Long but found Float二、错误分析三、解决办法总结 一、错误解释RuntimeError: expected scalar type Long but found Float RuntimeError&#xff1a;应为标量类型Long&#xff0c;但找到了Float 二、错误分析 我…