Как вы преобразуете XML, который слишком велик для работы с любым из классов .net преобразования? - PullRequest
0 голосов
/ 04 октября 2009

Я использую .NET XmlReader, потому что xml-файл слишком велик, чтобы использовать DOM или другой класс в памяти, но мне нужно как-то вернуться к иерархии xml с текущей позиции в XmlReader. Есть способ сделать это? Иногда мне нужно вернуться к первому уровню, чтобы получить контент. Я мог бы кэшировать некоторые xml-файлы при разборе, но это большие xml-файлы, поэтому я не хочу хранить большое количество данных при разборе xml, поскольку это может потенциально превысить память, или начать замедлять работу приложения, поскольку оно добавляет данные в растущий структура памяти. Но, может быть, это мой единственный выход.

Существует ли на каком-либо языке синтаксический анализатор xml, который может с этим справиться?

1 Ответ

1 голос
/ 04 октября 2009

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

Вы на самом деле не сказали нам, какая информация вам нужна от узлов-предков, но если вам только нужны узлы-предки - а не братья и сестры и т. Д. - это должно работать достаточно легко.

Будьте осторожны с самозакрывающимися элементами, такими как <foo attr="value" /> - вам нужно поместить их в стек, выполнить любую необходимую обработку, а затем вставить их снова, даже если вы не увидите отдельное событие «конечный элемент».

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