Linq to XML 之XElement的Descendants方法的新发现

C# 使用XElement类读取XML文件 前面介绍了使用XmlTextReader读取XML文件,XmlDocuemt读取XML文件,XDocument类来读取XML文件。接下测试使用XElement类来读取XML文件,有了如上几个示例,读取XML文件的任何节点的内容应该是很容易的了。测试的XML文件仍使用 Products.xml<Table> <Product> <Product_id>1</Product_id> <Product_name>Product 1</Produ 阅读详情

C#操作XML的方法有很多,但个人认为最方便的莫过于Linq to XML了,特别是XElement的Descendants方法是我最常用的一个方法。

这个方法可以根据节点名(Name)找到当前调用的XElement结点下所有的子XElement节点。最近,在写一个程序时时,让我有些新的发现。

示例XML文件:

复制代码
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <Activity xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.test.com/test">
 3   <Name>1</Name>
 4   <Activities>
 5     <Activity>
 6       <Name>2</Name>      
 7     </Activity>
 8     <Activity>
 9       <Name>3</Name>      
10     </Activity>
11   </Activities>
12 </Activity>
复制代码

这是一个关于Activity结点的树形结构,每个Activity节点都有一个Name子节点。我尝试着使用下面的代码,打印出所有Activity节点的Name子节点的值。

复制代码
1 var rootElement = XElement.Load("test.xml");
2 var nameNodes = rootElement.Descendants("Name");
3 
4 foreach (var nameNode in nameNodes)
5 {
6     Console.WriteLine(nameNode.Value);
7 }
8 
9  Console.ReadKey();
复制代码

但是结果却是空,当时很让我吃惊,经过调试后,我才发现我略了一个地方。不知道大家注意没有,测试的XML文件的根节点是有Namespace的,调用Descendants方法的时候,即使子节点没有指定Namespace,也会被自动添加上,而XElement的Name属性,恰恰是由Namespace和节点名共同组成的。找到原因了,解决方法也就有了,只要做些小改动就好。

当添加的时候,也会默认出现一个空的namespace, <MyElement xmlns=""/>, 可以在new XElement的时候用new XElement(doc.Root.Name.Namespace + "MyElement")来解决。

将代码

1 var nameNodes = rootElement.Descendants("Name");

改成

1 var nameNodes = rootElement.Descendants(rootElement.Name.Namespace + "Name");

即可。再次运行,便可打印出所有的Name节点值。

LINQ to XML:高效处理XML数据的.NET技术解析 XML作为数据交换的通用格式,在.NET生态中有着广泛应用。LINQ to XML通过将LINQ查询能力与XML文档操作结合,提供了比传统DOM更高效的解决方案。其核心原理基于System.Xml.Linq命名空间下的XElement、XDocument等类,支持函数式构造和LINQ查询语法,显著提升开发效率。在技术价值方面,LINQ to XML能减少50%以上的代码量,内存效率比DOM模型高出30%,特别适合处理中小型XML文件。典型应用场景包括订单处理系统、配置文件管理和Web API数据交换。通过D 阅读详情

相关推荐

LINQ to XML导航精要:X-DOM序列化查询与空安全实践

X-DOM(XML Document Object Model)是.NET中基于IEnumerable<T>实现的轻量级XML导航模型,其核心原理在于将节点访问抽象为延迟执行、可组合的序列操作,取代传统DOM的即时集合返回机制。这种设计赋予了LINQ to XML天然的空安全能力与链式查询表达力,显著提升XML数据提取的健壮性与可读性。技术价值体现在三方面:一是通过`(string)element`等隐式转换规避Value属性引发的NullReferenceException;二是利用`Elements()

weixin_40192258的博客 464

C#的LINQ to XML 类中使用最多的三个类:XElement、XAttribute 和 XDocument

System.Xml.Linq 命名空间包含 LINQ to XML 的19个类。LINQ to XML 是内存中的 XML 编程接口,使能轻松有效地修改 XML 文档。微软在 LINQ 上投入了很大的精力,使我们在编程时感觉到很舒服。处理XML 时使用最多的三个类:XElementXAttribute和XDocument。1包含 LINQ to XML 扩展方法。2表示 XML 特性。3表示包含 CDATA 的文本节点。4表示 XML 注释。5表示可包含其他节点的节点。6。

wenchm的博客 3005

C# LinqXML遍历指定节点下的所有对象

C# LinqXML遍历指定节点下的所有对象C# LinqXML遍历指定节点下的所有对象

C# 2

ADO.NET 和 LINQ using DataSet 1.用DataReader读取数据     读取SQL数据库:    ......    using System.Data;        //使用ADO.NET名称空间    using System.Data.SqlClient;    //使用SQL Server 数据提供者名称空间    ......     SqlConnection thisConnection = new SqlConnection(@".......数据库连接字符串

每一天都有新的希望 1815

C# LinqXML使用LINQ技术创建XML文件

亲测好用,利用c# 的LinqXML技术 使用LINQ技术创建XML文件

MoveIt控制睿尔曼RM65机械臂:从仿真到实机的3种控制模式对比

本文详细解析了使用MoveIt框架控制睿尔曼RM65机械臂的三种核心模式:拖动规划、目标姿态规划和Python API控制,从Gazebo仿真到实机部署的完整实现路径。通过ROS环境配置、控制参数优化及实机过渡技术,为工业自动化和机器人研究提供实用指南。

727

C# XElement

现有xml <NewDataSet> <item> <IDcard>202120101</IDcard> <Technician>测试</Technician> <Checkedby>张三</Checkedby> <ItemCode>34553453</ItemCode> <ItemName_CN>葡萄糖<

你要明白,任何问题都不是孤立存在的,一定有人曾经遇到过,并且已经有更好的解决办法了,只是我还不知道。我不应该在黑暗中独自前行,去重新发明轮子,也许我的顿悟,只是别人的基本功!我应该要站在巨人的肩膀上,学习更成熟的经验和方法,然后再来解决这个问题 2161

STK相关总结

STK简介 一.SIM卡应用工具包(SIM Application Toolkit),又名CAT/USAT,它包含一系列终端与SIM卡的交互指令,SIM卡可以应用卡内的小应用程序和终端交互,从而实现增值服务的目的,STK包括三种类,STK-imsi切换,STK –OTA,STK-BIP 功能: (1) Profile download:配置下载,开机初始化SIM卡过程中,终端告诉SIM卡终端支持哪些功能,STK中download指终端将数据发送给SIM卡 (2) Proactive command: 主动式

jingjing_2的博客 3356

LINQ To XML : Descendants函式

 LINQ To XML : Descendants函式     在LINQ To XML 的架構中,若想取得某個Element下的指定之子Element,可以呼叫Descendants這個Extension Method,如下所示: foreach (XElement elem in doc

黄忠成 6119

机器学习 线性回归 头歌实训

第1关:简单线性回归与多元线性回归 第2关:线性回归的正规方程解 第3关:衡量线性回归的性能指标 第4关:scikit-learn线性回归实践 - 波斯顿房价预测

weixin_57270536的博客 1万+

【正点原子I.MX6U-MINI移植篇】Ubuntu-base根文件系统移植构建过程详解(四)

能不能在ARM板上运行Ubuntu呢?答案肯定是可以的,Ubuntu是Linux系统的一种,可以简单的将Ubuntu理解为一个根文件系统,和我们用busybox、buildroot制作的根文件系统一样。因此移植Ubuntu也就是将Ubuntu根文件系统移植到我们的开发板上。

果果小师弟的博客 3767

Linq to XML:.NET中高效处理XML数据的核心技术

XML作为常见的数据交换格式,在.NET生态中有着广泛应用。传统DOM和SAX解析方式存在代码冗长、可读性差等问题,而Linq to XML通过集成LINQ查询能力,实现了声明式的XML处理范式。其核心原理是将XML文档对象模型与函数式编程结合,通过XElement、XAttribute等轻量级类库提供直观的操作接口。这种技术显著提升了开发效率,在电商订单处理、系统配置管理等场景中,代码量可减少60%以上。特别是其与LINQ to Objects的无缝集成,使得XML与关系型数据能够统一处理,成为.NET体

weixin_30633405的博客 327

企业老板管理者,如何监控员工的电脑屏幕?

老板监控员工电脑,需要知道员工开机后的上网行为来及时了解到员工工作情况,及时发现上班不良行为员工,及时淘汰低价值员工。 文章目录iMonitor EAM一、计算机系统日志二、具体功能介绍1.屏幕记录2.键盘记录总结 iMonitor EAM 怎么监控员工电脑,我们需要用到第三方软件,2021年最新版本软件-iMonitor EAM,软件分管理端和客户端,管理端在管理者电脑登录,客户端在员工电脑双击安装就可以,安装中不用任何设置的,客户端安装到员工电脑后也是隐藏的,不会有任何弹窗和警告信息,是无法发现和删

iMonitorSoft的博客 2179

LINQ to XML:.NET中高效处理XML数据的技术指南

XML作为结构化数据交换的标准格式,在.NET生态中有着广泛应用。LINQ to XML通过将LINQ查询范式与XML文档操作结合,提供了比传统DOM更高效的编程模型。其核心原理是基于XElement、XAttribute等类构建内存中的XML对象树,配合LINQ的延迟执行特性实现高性能查询。这项技术特别适用于配置文件解析、Web服务交互等场景,能显著减少样板代码量。通过功能构造(Functional Construction)特性,开发者可以用声明式语法创建复杂XML结构,而流式处理机制则解决了大型文件的

aiqixiao2017的博客 437

EastWave应用案例:机箱屏蔽效能仿真

如何使用EastWave对机箱的电磁屏蔽效能进行仿真

2201_76034687的博客 1392

USB2.0物理层实战:手把手教你用示波器抓取D+/D-信号(附波形分析)

本文是一份针对硬件工程师的USB2.0物理层信号调试实战指南。文章详细讲解了如何使用示波器捕获和分析D+/D-差分信号,从基础设置、核心信号状态解读,到信号完整性分析与常见问题排查,手把手教你定位USB通信故障。内容涵盖USB2.0协议物理层关键概念,并附有基础解码思路,旨在提升工程师的底层调试能力。

s8t9u0v1w的博客 448

LINQ to XML:高效处理XML数据的.NET技术

XML作为数据交换的通用格式,在.NET生态中有着广泛应用。LINQ to XML通过集成语言级查询能力,革新了XML处理方式。其核心原理是将XML文档对象化,通过XElement等轻量级类实现DOM功能,同时支持LINQ查询语法。这种技术显著提升了开发效率,特别是在类型安全、代码可读性和智能感知方面。典型应用场景包括配置文件管理、数据格式转换和报表生成等数据处理任务。结合功能构造特性,开发者能以声明式方式构建复杂XML结构。对于性能敏感场景,可通过延迟执行和流式处理优化内存使用。相较于传统XPath和Xm

anmishi2025的博客 395

《FPGA DDR3权威实战:从基础到高速故障录波系统》专栏导览:从不知所措到心中有数

本文是一份DDR3实战指南,作者从自身学习经历出发,分享了一套循序渐进的DDR3应用路线图。专栏包含12篇文章,从基础配置(MIG IP核、AXI总线)、仿真测试到实际项目应用(功能测试、性能测试),最后深入原生MIG接口实战,通过一个高速故障录播系统案例完整展示DDR3开发流程。文章特别强调实践性,旨在帮助读者系统掌握DDR3开发技能,避免作者当年踩过的坑。每篇都配有优快云链接,适合FPGA开发者按顺序学习参考。

FPGA_小田老师的博客 331

LINQ to XML核心概念与实战应用详解

LINQ to XML作为.NET框架中处理XML数据的革命性技术,通过将LINQ查询语法与XML操作相结合,显著提升了开发效率。其核心原理基于System.Xml.Linq命名空间下的XElement、XAttribute等类,支持函数式构造和类SQL查询语法,使得XML文档的创建、查询和修改变得直观高效。在数据处理领域,这种技术特别适用于配置管理、API响应解析和数据转换等场景,相比传统XmlDocument具有更好的内存效率和更现代的API设计。通过LINQ to XML,开发者可以轻松实现复杂XML

weixin_33853794的博客 400

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

LINQ to XML:用函数式构造优雅处理XML的.NET技术

XML作为经典结构化数据格式,广泛应用于配置文件、API响应和数据交换场景。其核心操作围绕节点模型展开,传统DOM API因强类型约束、内存开销大和语法冗长而影响开发效率。LINQ to XML通过轻量X-DOM设计、不可变节点语义与原生LINQ集成,将XML从‘需解析的文档’转变为‘可编程的数据结构’。它支持函数式构造、链式查询与智能序列化,在.NET平台实现高性能、高可读性与低耦合的XML工程实践,特别适用于配置生成、RSS解析、SOAP消息处理等典型应用。

weixin_40192258的博客 408

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

LINQ to XML 实战

LINQ to XML 轴定义:创建XML树或将XML文档加载到XML树之后,可以进行查询,从而查找元素并检索它们的值。 两类轴方法:-一些轴就是XELement和XDocument类中返回IEnumerable(T)集合的方法。-另一些轴方法是Extensions类中的扩展方法。实现为扩展方法的轴对集合进行操作,然后返回集合。XContainer是XElement的基类! -常...

dianzudi1839的博客 156

Linq to XML核心解析与高效应用指南

XML数据处理是软件开发中的常见需求,传统DOM操作方式代码冗长且易出错。Linq to XML作为.NET框架的创新技术,通过集成LINQ查询语法,实现了强类型支持和编译时检查,大幅提升开发效率。其核心原理是将XML文档对象模型与LINQ查询表达式结合,支持从文件、字符串或代码动态构建XML树。在技术价值方面,相比XPath更符合开发者直觉,智能提示和查询组合能力显著降低学习成本。典型应用场景包括配置文件处理、Web API数据交换和数据库交互,特别适合需要频繁查询和转换XML结构的中小型项目。通过合理使

weixin_33861800的博客 386

System.Xml.Linq.XElement Elements() 与 Descendants()

Elements() 获得当前节点的子节点, Descendants() 获取当前节点的子代节点,子节点、子节点的子节点、子节点的子节点的子节点、。。。。。由于Descendants() 获取当前节点的子代节点,数据量会很大,因此Descendants()方法延迟执行。 举例来说:对于Xml文件,          小李           小牛    XEl

813

LinqTOXML DescendantNodes、DescendantNodesAndSelf和Descendants、DescendantsAndSelf方法

LinqTOXML DescendantNodes、DescendantNodesAndSelf和Descendants、DescendantsAndSelf方法Examples:/*DescendantNodes 原型         *          * 功能:按文档顺序返回此文档或元素的子代节点集合。         *          * public static IEnumera

Feiin的专栏 2095

LINQ之路18:LINQ to XML之导航和查询

在.NET开发中,XML处理一直是一个重要场景。传统方式使用XmlDocument操作XML繁琐且代码量大,而LINQ to XML通过结合LINQ查询语法,让XML导航和查询变得简洁优雅。:使用安全的类型转换避免空引用异常相比传统的XmlDocument,LINQ to XML不仅代码更简洁,而且与LINQ生态无缝集成,大大提高了开发效率和代码可维护性。### 3. 高级查询:结合LINQ表达式LINQ to XML最强大的地方在于可以直接在查询语法中操作XML元素,实现复杂条件筛选和投影。

Io32IgcL1的博客 241
上一篇: C#中正则表达式的使用
下一篇: 解析Visual Studio 2015促进生产力的10个新功能
imJaron
博客等级 码龄11年 121粉丝 286原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值