2012-02-10 4 views
3

Основная часть примеров, которые я могу найти для libxml2, касается загрузки/разбора XML-файлов. Но я заинтересован в их написании; код никогда не будет разбирать файлы. Существует пример using different writers, где показано, как использовать модели file, memory, DOM и tree.libxml2 отличия писателя

Просмотрев код, я не вижу существенных различий между ними, когда дело доходит до написания. Как решить, что лучше использовать? (Другими словами, в каких случаях лучше других?)

ответ

2

Различия между указанными вами четырьмя функциями минимальны, все зависит от того, куда идет содержимое. Как заметил Алекс, если память вызывает беспокойство, то использование xmlNewTextWriterFilename имеет то преимущество, что не нужно сохранять результат в памяти.

API xmlWriter, к которому относятся все упомянутые вами методы, является одним из предлагаемых API. Другим примечанием является tree API. xmlWriter больше похожа на вызов write() для печати в файл, а дерево больше похоже на создание вложенных структур в памяти.

Версии, основанные на дереве, могут быть хорошими, если ваши данные построены в нелинейном режиме, возвращаются и добавляются/изменяются на основе более поздней информации и т. Д. Это потребует некоторых обходных путей/кэширования с потоковым интерфейсом xmlWriter , так как вы не можете изменить ситуацию после их выхода. Однако дерево in-memory может быть полностью изменено до момента его сериализации.

API дерева имеет недостаток в том, что он должен хранить всю память в памяти; Эмпирическое правило - требования к памяти для синтаксического дерева, размер которого равен 4x размеру сериализованного xml-файла.

Мое решение, как правило, зависит от того, буду ли я создавать большие документы. Если нет, я использую if tree api, так как гибкость будет там, если я этого захочу. Если я знаю, что эффективность будет проблемой, или я буду работать с большими материалами, потоковый xmlWriter - это путь.

Примеры деревьев API можно найти здесь: http://xmlsoft.org/examples/index.html#Tree

1

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

Смежные вопросы