【原创】C# Linq to XML

引言

LINQ to XML 提供使用 .NET 语言集成查询 (LINQ) Framework 的内存中 XML 编程接口。 LINQ to XML 使用最新的 .NET Framework 语言功能,相当于更新的和重新设计的文档对象模型 (DOM) XML 编程接口。

在当今的web开发过程中xml被经常使用(有用来存储小数据的;有用来数据传输的;也有用来做配置的)。对于很少接触xml的朋友一开始都比较怕操作xml(本人以前就是很怕操作xml),本文将教你如何使用linq to xml 轻松而简单地获取值和属性。希望看完本文的朋友以后不再惧怕操作xml。而在linq to xml 没有出现之前,我们通常使用XmlDocument/XmlNode来读值和属性,如兴趣的朋友可以看看下面几篇文章

http://www.cnblogs.com/zhxhdean/archive/2012/04/18/2345546.html
http://www.cnblogs.com/zhxhdean/archive/2012/02/27/2369451.html
http://www.cnblogs.com/zhxhdean/archive/2012/02/07/2340916.html

正文

例如我们有以下xml内容(保存为books.xml):

<?xml version="1.0" encoding="utf-8" ?>
<Books>
 <Book>
  <Subject ID="1">
   Head First 设计模式
  </Subject>
  <Content>
   Head First 设计模式中文版
  </Content>
 </Book>
 <Book>
  <Subject ID="2">
   C# 高级编程第5版
  </Subject>
  <Content>
   C# 高级编程第5版
  </Content>
 </Book>
 <Book>
  <Subject ID="3">
   C# 入门手册
  </Subject>
  <Content>
   C# 入门手册
  </Content>
 </Book>
</Books>

使用linq to xml 实现获取subject的值及属性ID。

var books = from nodes in XElement.Load("books.xml").Elements("Book") select nodes;
if (books != null)
{
  foreach (var b in books)
  {
    listBox1.Items.Add(b.Element("Subject").Attribute("ID").Value + ":" + b.Element("Subject").Value.Trim());
  }
}

运行代码,效果图如下:

注:1.引用using System.Xml.Linq;
      2.XElement.Load注意路径是否正确

Linq to xml VS xPath(来自http://msdn.microsoft.com/zh-cn/library/bb675156.aspx)

XPath 不允许新类型的投影。 它只能从树中返回节点集合,而 LINQ to XML 可以执行查询并将对象图或 XML 树投影为新形状。 LINQ to XML 查询包含更多功能并且比 XPath 表达式的功能强大得多。

XPath 表达式在字符串中孤立存在。 C# 或 Visual Basic 编译器不能帮助在编译时分析 XPath 表达式。 相比之下,C# 或 Visual Basic 编译器可以分析和编译 LINQ to XML 查询。 编译器能够捕捉许多查询错误。

XPath 结果不是强类型。 在许多情况下,XPath 表达式的计算结果是一个对象,并且该对象需要由开发人员确定属性类型并根据需要强制转换结果。 相比之下,LINQ to XML 查询生成的投影是强类型。

使用 LINQ to XML 中 XPath 功能的 XPath 查询的执行性能比 LINQ to XML 查询低。

结束
文章很短,希望对各位有帮助。最后欢迎各位拍砖!

原文地址:https://www.cnblogs.com/zhxhdean/p/2584688.html