Linq To XML, yield и другие - PullRequest
       4

Linq To XML, yield и другие

11 голосов
/ 05 августа 2011

Мне было интересно, есть ли библиотека .NET или сторонний инструмент для выполнения Entity Framework, например LINQ-запросов к XML-документам.Я знаю, что уже есть LINQ to XML, который позволяет вам выполнять запросы к XDocument объекту, который УЖЕ загружен в память , но что, если XML-документ имеет чрезвычайно большой размер (более гигабайта)?

Я хотел бы иметь возможность передать этот запрос XmlReader, а не XDocument объекту.Это возможно прямо из коробки?

Ответы [ 2 ]

3 голосов
/ 05 августа 2011

Взгляните на этот кодекс-проект .

1 голос
/ 05 августа 2011

Я не верю, что у вас будет решение, которое будет соответствовать всем документам XML, но вы можете сделать это.

Я бы создал класс, который реализует IEnumerable<T> и принимает XmlReader, который вы хотите передать.

Затем я бы создал тип, который будет использоваться для параметра типа T в вашей реализации IEnumerable<T>.

Как только вы это получите, в вашей реализации GetEnumerator вы вызовете различные Move* и Read* методы для XmlReader, которые позволят вам создать единственный экземпляр T.

Если у вас есть экземпляр T в руке, вы должны использовать yield return для получения предмета. Остальная часть тела GetEnumerator будет зацикливаться надлежащим образом при потоковой передаче через XmlReader.

Имея это в виду, вы будете транслировать экземпляры T по мере их получения, без необходимости загружать весь документ в память.

Вы, конечно, должны проверить, сколько документов вы хотите прочитать за раз.

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