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


我的问题基本上是一个简单的问题,尽管我在这里寻找的答案是深入的: 如何 LINQ to XML 在幕后工作?

现在,我已经有了相当多的LINQ to XML用于各种应用程序的经验,所以它的接口对我来说并不陌生,但我对内部的运行方式一无所知。现在,我对LINQ提供程序的工作方式(实现方式)有了一些了解 IQueryable 和 IQueryProvider 并且利用访客模式,实质上)。但是,我还没有发现LINQ to XML的LINQ提供程序的任何内容 - 即使搞乱了Reflector并没有让我任何地方,尽管我可能错过了显而易见的事情。最有趣的是,我无法找到LINQ提供程序的任何证据(实现 IQueryProvider在...内 System.Xml.Linq 装配/名称空间。

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

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


12909
2018-05-10 11:01


起源



答案:


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

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

这也解释了 这里


13
2018-05-10 11:20



是的,这几乎是我怀疑的。谢谢(你的)信息。 - Noldorin


答案:


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

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

这也解释了 这里


13
2018-05-10 11:20



是的,这几乎是我怀疑的。谢谢(你的)信息。 - Noldorin