LINQ to XML - Как это работает? - PullRequest
11 голосов
/ 10 мая 2009

Мой вопрос по сути простой, хотя я ищу более подробный ответ: Как 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.

1 Ответ

13 голосов
/ 10 мая 2009

LINQ to XML - это на самом деле просто LINQ-to-Objects, которые работают с объектами, представляющими XML. Поэтому, когда вы пишете запрос LINQ для извлечения узлов из XDocument (например), вы на самом деле просто вызываете методы расширения, которые возвращают IEnumerable , и запускаете стандартные операторы запроса, как они определены для IEnumerable .

Таким образом, можно сказать, что LINQ-to-XML в основном состоит из семейства XElement XML-представляющих классов и множества методов расширения, которые предоставляются для них, чтобы упростить запросы.

Это также объясняется здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...