Мой вопрос по сути простой, хотя я ищу более подробный ответ: Как LINQ to XML работает за кулисами?
Теперь у меня достаточно опыта работы с LINQ to XML для различных приложений, так что его интерфейсы не представляют для меня ничего странного, но я совершенно не понимаю, как работают внутренние устройства. Теперь у меня есть общее представление о том, как работают провайдеры LINQ (реализация IQueryable
и IQueryProvider
и использование шаблона посетителя по существу). Тем не менее, я не смог ничего узнать о поставщике LINQ для LINQ to XML - даже возня с Reflector никуда не делась, хотя, возможно, я упускал очевидное. Самое интересное, что я не смог найти никаких свидетельств поставщика LINQ (реализация IQueryProvider
) в System.Xml.Linq
сборке / пространстве имен.
Наблюдение за моделью LINQ to XML показало, что это довольно уникальная форма LINQ, в которой запросы LINQ и связанный с ними синтаксис не кажутся такими уж неотъемлемыми для технологии, а скорее основаны на запрашиваемая модель DOM, которая предоставляет множество полезных методов расширения. В действительности, я хотел бы знать, есть ли в LINQ to XML даже поставщик запросов в стандартном смысле (например, в LINQ to SQL), или это по сути каркас с методами расширения, над которыми вы можете используйте LINQ to Objects для облегчения использования. Кроме того, мне также любопытно, как выполняется синтаксический анализ / преобразование кода XML в иерархию DOM - похож ли XDocument
qutie на старый XmlDocument
в этом смысле? Использует ли он XmlReader
или что-то подобное за кадром для анализа и интерпретации документа при загрузке?
Это очень открытый вопрос, поэтому любая информация о том, как LINQ to XML работает за кулисами, была бы очень кстати. Мое намерение здесь в первую очередь состоит в том, чтобы создать представление о том, как была разработана эта конкретная технология LINQ, чтобы впоследствии я мог попытаться эмулировать ее для формата, аналогичного структуре XML.