создавать и передавать большой XML-документ на C ++ - PullRequest
1 голос
/ 08 сентября 2008

У меня есть код, который создает довольно большой XML-DOM и записывает его в файл (до 50-100 МБ). Он в основном создает DOM, а затем вызывает toString и записывает его с помощью ofstream. Есть ли способ получить потоковый вывод сгенерированного dom, чтобы он не создал всю структуру в памяти сразу, а затем скопировал ее и т. Д.? Я не буду изменять ни один узел после того, как я создам его, чтобы он мог выписать его и сразу же освободить память. Я мог бы написать свой собственный класс xml, который выполняет конструкцию xml, но ... я не думаю, что это хорошая идея, поскольку я, вероятно, что-то упущу, когда дело доходит до побега и т. Д.

Ответы [ 4 ]

3 голосов
/ 11 сентября 2008

Хорошо, оказывается, у libxml2 есть потоковый API:

http://xmlsoft.org/examples/testWriter.c

Это немного старый стиль (очень C-ish), но вы можете написать свою обертку вокруг него.

1 голос
/ 09 сентября 2008

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

0 голосов
/ 04 августа 2014

Нет ничего особенного в создании правильного XML; побег, о котором вы беспокоитесь, тривиален.

Здесь есть библиотека для потоковой записи XML: https://code.google.com/p/xml-writer-cpp/ - если ничего другого, это полезно для образовательных целей.

0 голосов
/ 05 мая 2009

Смотрите под ключевым словом "C ++ XML writer;" Авторы XML генерируют XML в файл, не создавая в памяти весь DOM, поэтому им вообще не нужно много памяти. Вы не упомянули платформу, но Microsoft XmlLite имеет IXmlWriter.

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