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