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

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

示例XML文件:

 <?xml version="1.0" encoding="utf-8"?>
<Activity xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.test.com/test">
<Name>1</Name>
<Activities>
<Activity>
<Name>2</Name>
</Activity>
<Activity>
<Name>3</Name>
</Activity>
</Activities>
</Activity>

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

 var rootElement = XElement.Load("test.xml");
var nameNodes = rootElement.Descendants("Name"); foreach (var nameNode in nameNodes)
{
Console.WriteLine(nameNode.Value);
} Console.ReadKey();

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

将代码

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

改成

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

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

Linq to XML 之XElement的Descendants方法的新发现的更多相关文章

  1. 七、Linq To XML:XElement、XDocument

    一.概述 LINQ to XMLLINQ to XML 是一种启用了 LINQ 的内存 XML 编程接口,使用它,可以在 .NET Framework.NET Framework 编程语言中处理 XM ...

  2. LINQ系列:LINQ to XML操作

    LINQ to XML操作XML文件的方法,如创建XML文件.添加新的元素到XML文件中.修改XML文件中的元素.删除XML文件中的元素等. 1. 创建XML文件 string xmlFilePath ...

  3. Linq学习笔记---Linq to Xml操作

    LINQ to XML的成员, 属性列表: 属性 说明 Document 获取此 XObject 的 XDocument  EmptySequence  获取空的元素集合  FirstAttribut ...

  4. 第六篇 -- LINQ to XML

    一.LINQ to XML常用成员 LINQ to XML的成员, 属性列表: 属性 说明 Document 获取此 XObject 的 XDocument  EmptySequence  获取空的元 ...

  5. LINQ系列:LINQ to XML类

    LINQ to XML由System.Xml.Linq namespace实现,该namespace包含处理XML时用到的所有类.在使用LINQ to XML时需要添加System.Xml.Linq. ...

  6. LINQ系列:LINQ to XML查询

    1. 读取XML文件 XDocument和XElement类都提供了导入XML文件的Load()方法,可以读取XML文件的内容,并转换为XDocument或XElement类的实例. 示例XML文件: ...

  7. Linq to Xml读取复杂xml(带命名空间)

    前言:xml的操作方式有多种,但要论使用频繁程度,博主用得最多的还是Linq to xml的方式,觉得它使用起来很方便,就用那么几个方法就能完成简单xml的读写.之前做的一个项目有一个很变态的需求:C ...

  8. c#操作xml文件(XmlDocument,XmlTextReader,Linq To Xml)

    主界面

  9. Linq对XML的简单操作

    前两章介绍了关于Linq创建.解析SOAP格式的XML,在实际运用中,可能会对xml进行一些其它的操作,比如基础的增删该查,而操作对象首先需要获取对象,针对于DOM操作来说,Linq确实方便了不少,如 ...

随机推荐

  1. angularJs中图表功能(有集成框架)-angular-flot

    1.柱状图和折线图的数据格式: $scope.Chart.data = [ { label: "离线", data: [[0, 2]] }, { label: "在线&q ...

  2. 【java.math.BigInteger】【转】常见问题

    好大的链接给原作 Q: 在java怎样将BigInteger类型的数据转成int类型的? A:BigInteger的intValue()可以获得int类型数值. Q: java.math.BigInt ...

  3. hdu 3234 并查集

    虚拟一个根节点n,设其值为0.并且始终保持其为根. #include<map> #include<set> #include<cmath> #include< ...

  4. 转: 微博的多机房部署的实践(from infoq)

    转:  http://www.infoq.com/cn/articles/weibo-multi-idc-architecture 在国内网络环境下,单机房的可靠性无法满足大型互联网服务的要求,如机房 ...

  5. 如何取消IE“已限制此网页运行可以访问计算机的脚本或ActiveX控件

    在本地调试html页,如果其中包含js或flash,IE经常会提示“IE已限制此网页运行可以访问计算机的脚本或ActiveX控件”.虽然IE出于安全考虑阻止本地脚本运行这个做法没错,但作为程序开发者来 ...

  6. 如何把rtf、doc文件转换为HTML文件

    //retText是路径 1 public string ExtractHtml(string rtfText) { try { //Create word object Word.Applicati ...

  7. CSS之隐藏元素

    1.opacity=0,该元素隐藏起来了,但不会改变页面布局,并且,如果该元素已经绑定一些事件,如click事件,那么点击该区域,也能触发点击事件的2.visibility=hidden,该元素隐藏起 ...

  8. Java之组合数组1

    我们先说"数组",数组是有序数据的集合,数组中的每个元素具有相同的数组名和下标来唯一地确定数组中的元素. 一.一维数组的定义 type arrayName[]; 其中类型(type ...

  9. eBay 开发流程

    1[记录]注册成为eBay开发者(eBay Developers Program)+创建Sanbox Key和Production Key http://www.crifan.com/register ...

  10. 了解常见的开源协议(BSD, GPL, LGPL,MIT)

    一直对各种开源协议比较模糊, 特意在网上搜索了一下资料, 整理总结,以作记录 如果不喜欢长篇大论的话, 看下图就可以了 基本概念了解: 1. Contributors 和 Recipients Con ...