Как вы можете фильтровать глубоко вложенный XML с помощью LINQ (только потоковая передача), сохраняя древовидную структуру? - PullRequest
0 голосов
/ 22 июня 2009

Я хотел бы знать, как выполнять потоковую передачу по очень большому, глубоко вложенному XML-документу с использованием LINQ, при его потоковой передаче, фильтровать узлы по некоторым критериям, а затем записывать потоковый вывод в файл, сохраняя при этом ту же исходную структуру XML.

Это должно происходить без загрузки всего документа в память.

Возможно ли это?

Ответы [ 3 ]

1 голос
/ 23 июня 2009

Эта статья содержит ответ на мой вопрос:

http://homepages.cwi.nl/~ralf/api-streaming-xml/

В частности, он показывает, как поддерживать древовидную структуру исходного XML при фильтрации результатов во время потоковой передачи.

1 голос
/ 22 июня 2009

LINQ to XML не поддерживает прямое потоковое чтение, но мне удалось использовать XmlReader, фильтрацию на основе , , а затем передать ее на XElement.Load когда я обнаружил интересующее поддерево. Предполагается, что поддерево достаточно мало, чтобы поместиться в память. Когда Load вернется, читатель будет перемещен за пределы этого поддерева, и вы сможете продолжать идти, пока не найдете следующее соответствующее поддерево и т. Д.

См. это сообщение в блоге MSDN для получения дополнительной информации и примера кода.

(Это то, что я сделал с дампом данных переполнения стека, кстати:)

0 голосов
/ 23 июня 2009

Что касается параметров потоковой передачи XML, ознакомьтесь с обсуждением XML-группы о потоковой передаче с LINQ to XML, начиная с http://blogs.msdn.com/xmlteam/archive/2007/03/05/streaming-with-linq-to-xml-part-1.aspx.. Поймите, что это ранняя серия блогов, и в финальную версию были внесены некоторые изменения в детали реализации.

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