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

Nol*_*rin 11 .net xml linq linq-to-xml

我的问题本质上是一个简单的问题,虽然我正在寻找这里可能的深入答案:LINQ to XML如何在幕后工作?

现在,我已经有了相当多的LINQ to XML用于各种应用程序的经验,所以它的接口对我来说并不陌生,但我对内部的运行方式一无所知.现在,我确实有一般多少LINQ提供工作的一些认识(实施IQueryableIQueryProvider和利用访问者模式,在本质).但是,我还没有发现LINQ to XML的LINQ提供程序的任何内容 - 即使搞乱了Reflector并没有让我任何地方,但也许我错过了显而易见的事情.最有趣的是,我无法IQueryProviderSystem.Xml.Linq程序集/命名空间中找到任何LINQ提供程序(实现)的证据.

从观察LINQ到XML模型,它让我感到一种相当独特的LINQ形式,因为LINQ查询和相关语法似乎不是技术的重要组成部分,它似乎更多地基于可查询的DOM提供了许多有用的扩展方法的模型.实际上,我首先要知道的是,LINQ to XML甚至是否具有标准意义上的查询提供程序(例如LINQ to SQL),或者它本质上是一个带有扩展方法的框架,您可以在其上使用LINQ to Objects来方便使用.另外,我也很好奇从XML代码到DOM层次结构的解析/转换是如何完成的 - 在这个意义上是否XDocument类似于旧的XmlDocument?是否XmlReader在加载后使用一个或类似的幕后解析和解释文档?

这是一个非常开放的问题,因此任何有关LINQ to XML如何在幕后运行的信息都将受到欢迎.我的目的主要是建立一个如何设计这种特定LINQ技术的图片,以便随后我可以尝试自己模拟一种与XML结构类似的格式.

dri*_*iis 13

LINQ to XML实际上只是LINQ-to-Objects,它适用于表示XML的对象.因此,当您编写LINQ查询以从XDocument(例如)中检索节点时,您实际上只是调用返回IEnumerable <T>的扩展方法,并调用标准查询运算符,因为它们是为IEnumerable <T>定义的.

因此,可以说LINQ-to-XML主要由XML表示类的XElement系列和为这些类提供的许多扩展方法组成,以便使查询更容易.

这也在这里解释.