Различия между указанными вами четырьмя функциями минимальны, все зависит от того, куда идет содержимое. Как заметил Алекс, если память вызывает беспокойство, то использование 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