Мне нужно выполнить некоторую обработку довольно больших XML-файлов (в данном случае они могут быть больше гигабайта), включая выполнение некоторых сложных запросов xpath. У меня проблема в том, что стандартным способом, которым я обычно делаю это через библиотеки System.XML, нравится загружать весь файл в память, прежде чем он что-либо с ним делает, что может вызвать проблемы с памятью для файлов такого размера.
Мне вообще не нужно обновлять файлы, просто читая их и запрашивая содержащиеся в них данные. Некоторые запросы XPath довольно сложны и проходят через несколько уровней отношений типа родитель-потомок - я не уверен, повлияет ли это на возможность использования потокового считывателя вместо загрузки данных в память в виде блока.
Один из способов понять, как это работает, - выполнить простой анализ с использованием потокового подхода и, возможно, обернуть операторы XPath в преобразования XSLT, которые я потом смогу выполнить по файлам, хотя это кажется немного запутанным.
С другой стороны, я знаю, что есть некоторые элементы, по которым запросы XPath не будут проходить, поэтому, я думаю, я мог бы разбить документ на серию более мелких фрагментов на основе его исходной древовидной структуры, которая, возможно, могла бы быть достаточно маленькой для обработки в памяти, не вызывая слишком много хаоса.
Я попытался объяснить свою цель здесь, так что, если я лаю совсем не по дереву с точки зрения общего подхода, я уверен, что вы, ребята, можете исправить меня ...