LINQ to XML - 它是如何工作的?

11
我的问题本质上很简单,尽管我在这里寻求尽可能深入的答案: LINQ to XML背后的工作原理是什么? 现在,我已经有了相当多的使用LINQ to XML进行各种应用程序开发的经验,所以它的接口对我来说并不陌生,但我对其内部操作完全不了解。现在,我对LINQ提供程序通常如何工作(实现IQueryableIQueryProvider并利用访问者模式等)有一些了解。然而,我还没有能够发现关于LINQ to XML的LINQ提供程序的任何信息--即使是使用反编译工具也没有任何收获,尽管也许我漏看了一些显而易见的东西。最有趣的是,在System.Xml.Linq程序集/命名空间中找不到任何LINQ提供程序(IQueryProvider的实现)。
观察LINQ to XML模型,我发现它是一种独特的LINQ形式,因为LINQ查询和相关语法似乎并不那么与技术密切相关,而更像是基于可查询DOM模型,提供了许多有用的扩展方法。所以,我首先想知道的是,LINQ to XML是否甚至具有标准意义上的查询提供程序(例如LINQ to SQL),还是本质上是一个框架,其上有扩展方法,您可以使用LINQ to Objects来促进使用。此外,我还想知道从XML代码到DOM层次结构的解析/转换是如何完成的-在这方面,XDocument是否与旧的XmlDocument非常相似?它是否在幕后使用XmlReader之类的工具来解析和解释加载的文档?
这是一个非常开放性的问题,因此关于LINQ to XML在幕后操作的任何信息都将非常受欢迎。我在这里的意图主要是建立起这个特定LINQ技术是如何设计的,以便我随后可以尝试为具有类似XML结构的格式自己模拟它。
1个回答

13
LINQ to XML实际上只是LINQ-to-Objects,它可以操作表示XML的对象。因此,当您编写LINQ查询以从XDocument检索节点(例如)时,实际上只是调用返回IEnumerable<T>的扩展方法,并调用标准查询运算符,就像对IEnumerable<T>定义的一样。
因此,可以说LINQ-to-XML主要由表示XML的XElement类系列和为其提供的许多扩展方法组成,以使查询更加简单。
这在这里也有解释。

是的,这正是我怀疑的。感谢提供信息。 - Noldorin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接