C#如何将XML节点转换为Dictionary

发布时间 - 2025-12-31 00:00:00    点击率:
可采用五种方法将XML节点映射为C# Dictionary:一、XmlDocument遍历;二、LINQ to XML;三、递归解析嵌套结构;四、XmlSerializer配合自定义类;五、处理属性型XML。

如果您需要将XML节点的内容解析并映射为C#中的Dictionary对象,则需根据XML结构提取键值对。以下是实现此目标的多种方法:

一、使用XmlDocument遍历节点生成Dictionary

该方法适用于结构清晰、每个子节点代表一个键值对的XML片段,通过手动遍历XmlElement的子节点,提取节点名作为键、节点文本作为值。

1、创建XmlDocument实例,并调用LoadXml或Load方法加载XML字符串或文件。

2、获取根元素下的所有直接子节点,过滤出XmlElement类型节点。

3、对每个XmlElement节点,以节点名称为键,InnerText为值,添加到Dictionary中。

4、跳过注释、空白文本节点等非元素节点,确保仅处理有效键值节点。

二、使用LINQ to XML解析并构建Dictionary

该方法利用XDocument和LINQ查询语法,代码更简洁,支持函数式风格转换,适合.NET 3.5及以上版本。

1、调用XDocument.Parse或XDocument.Load加载XML数据。

2、使用Descendants或Elements方法定位目标层级的子节点集合。

3、对每个节点,构造匿名对象或元组,其中Key = node.Name.LocalName,Value = node.Value.Trim()

4、调用ToDictionary扩展方法,传入keySelector和elementSelector,生成Dictionary

三、递归解析嵌套XML节点为嵌套Dictionary

当XML包含多层嵌套结构(如子节点内含子节点),需将父节点映射为Dictionary,其中object可为string或嵌套Dictionary,以保持层级语义。

1、定义递归方法,参数为XElement,返回类型为object。

2、若当前XElement无子元素,则返回其Trimmed Value字符串。

3、若存在子元素,则新建Dictionary,对每个子元素递归调用该方法并存入。

4、对同名重复子节点,自动合并为List,避免键冲突。

四、使用XmlSerializer配合自定义类间接转Dictionary

该方法不直接生成Dictionary,而是先反序列化为强类型对象,再通过反射或扩展方法将其属性-值对导出为Dictionary,适用于有固定Schema的XML。

1、定义与XML结构匹配的C#类,各属性标注[XmlElement]或[XmlAttribute]。

2、使用XmlSerializer.Deserialize将XML流反序列化为该类型实例。

3、调用GetType().GetProperties()获取所有公共属性。

4、对每个PropertyInfo,以Property.Name为键,Property.GetValue(instance)为值,加入Dictionary

五、处理属性型XML结构转Dictionary

当XML节点的键值信息全部存储在attribute中(如),应将attribute名作为键、attribute值作为值,而非依赖子节点。

1、加载XML后,定位到目标XElement节点。

2、调用Attributes()获取所有XAttribute集合。

3、对每个XAttribute,以attr.Name.LocalName为键,attr.Value为值,填入Dictionary

4、忽略xmlns等命名空间声明属性,可通过检查attr.Name.Namespace == XNamespace.None进行过滤。


# node  # xml解析  # c#  # 键值对  # .net  # c#类  # String  # Object  # 命名空间  # xml  # 字符串  # 递归  # Namespace  # Attribute  # Property  # 对象  # linq  # 遍历  # 键值  # 适用于  # 加载  # 自定义  # 将其  # 而非  # 可通过  # 您需要 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  Laravel API资源类怎么用_Laravel API Resource数据转换  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  详解jQuery中的事件  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  微信小程序 scroll-view组件实现列表页实例代码  实例解析Array和String方法  Laravel怎么在Blade中安全地输出原始HTML内容  Android使用GridView实现日历的简单功能  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  如何在云服务器上快速搭建个人网站?  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  Laravel如何使用Vite进行前端资源打包?(配置示例)  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  HTML 中动态设置元素 name 属性的正确语法详解  实例解析angularjs的filter过滤器  jquery插件bootstrapValidator表单验证详解  Laravel如何集成Inertia.js与Vue/React?(安装配置)  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  如何在万网主机上快速搭建网站?  手机网站制作与建设方案,手机网站如何建设?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  如何在建站宝盒中设置产品搜索功能?  如何快速生成橙子建站落地页链接?  魔方云NAT建站如何实现端口转发?  详解jQuery中基本的动画方法  如何快速启动建站代理加盟业务?  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  如何用狗爹虚拟主机快速搭建网站?  如何在阿里云高效完成企业建站全流程?  Bootstrap CSS布局之列表  如何快速建站并高效导出源代码?  图册素材网站设计制作软件,图册的导出方式有几种?  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  北京网站制作公司哪家好一点,北京租房网站有哪些?  Laravel怎么调用外部API_Laravel Http Client客户端使用  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  如何在局域网内绑定自建网站域名?  网站制作软件有哪些,制图软件有哪些?  如何在云主机上快速搭建多站点网站?  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】