Лучшая библиотека XML-сериализации для приложения MFC C ++ - PullRequest
5 голосов
/ 22 октября 2008

У меня есть приложение, написанное на C ++ с использованием библиотек MFC и Stingray. Приложение работает с широким спектром больших типов данных, которые в настоящее время сериализуются на основе производной функциональности MFC Document / View. Я также добавил опции для сериализации XML на основе библиотек Stingray, которые реализуют DOM через Microsoft XML SDK. Хотя легко реализовать производительность, это ужасно, поскольку ее нельзя использовать ни с чем, кроме очень маленьких документов.

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

Ответы [ 8 ]

4 голосов
/ 13 февраля 2010

Это старая проблема. Я был руководителем группы разработчиков с наиболее критическими зависимостями пути от самого крупного программного проекта в мире в 1999 и 2000 годах, и именно эта проблема была в центре моей работы в то время. Я убежден, что колесо было изобретено несколькими инженерами, которые не знали, что другие уже изобрели его. То же самое относится и к привязке XML-данных в C ++. Я тоже изобрел это и совершенствовал его более 10 лет в различных проектах. У меня есть решение, которое решает проблемы, отмеченные здесь, и некоторые дополнительные проблемы, которые постоянно возникают:

  1. Обновления XML. Это возможность повторно применить подмножество XML в существующую объектную модель. Во многих случаях XML привязан к индексированным объектам, и мы не можем позволить себе переиндексировать каждое обновление.

  2. Управление интерфейсами COM и CORBA. В том же отношении, что привязка данных XML может быть автоматизирована с помощью объектно-ориентированных практик, как и экземпляры объектов интерфейса, которые предоставляют эти данные на прикладном уровне.

  3. Отслеживание состояния. Прикладная программа часто должна различать пустое значение и отсутствующее значение - оба создают пустую строку. Это обеспечивает проверку вместе с привязкой данных.

Исходный код использует наименее ограничительную лицензию - менее, чем GPL. Проект поддерживается и управляется отсюда:

http://www.codeproject.com/KB/XML/XMLFoundation.aspx

Теперь, когда наступил 2010 год, я верю, что никто больше не будет пытаться изобретать велосипед, потому что есть из чего выбирать. ИМХО - это колесо является наиболее отшлифованным и хорошо округленным вариантом из доступных.

Наслаждайтесь.

4 голосов
/ 22 октября 2008

Библиотека Boost Serialization поддерживает XML. Эта библиотека в основном состоит из:

  1. Начните с принципов сериализации MFC и возьмите все то хорошее, что оно дает.
  2. Решите каждую проблему сериализации MFC!

Среди улучшений по сравнению с MFC - поддержка XML. Обратите внимание, что вы не обязательно управляете схемой XML этой сериализации. Он использует свою собственную схему.

2 голосов
/ 22 октября 2008

Используем Xerces-C ++ . Его было легко настроить, а производительность достаточно хорошая, поэтому нам не нужно думать об изменениях. Тем не менее, мы не тяжелые XML.

Я слушал подкаст Скотта Хансельмана (из Минуты Гензеля ), где они обсуждают производительность XML для MSXML и XSLT.

2 голосов
/ 22 октября 2008

Хорошим решением будет libxml . Он обеспечивает легкий синтаксический анализ SAX и структуры данных для обработки XML. Существует несколько библиотек DOM, которые построены на основе libxml.

К сожалению, это библиотека C, но доступны обертки C ++.

Несколько лет назад я перешел с MSXML на libxml из-за проблем с производительностью, которые вы упомянули.

Если вы решили использовать libxml, вам также следует взглянуть на libxslt .

1 голос
/ 29 марта 2017

Это поздно в игре, я просто хочу упомянуть, что мы также используем LIBXML. Это надежный и надежный, и работал хорошо. Немного низкоуровневый, вы захотите построить некоторые обертки поверх его функций.

Например, вы получите различную последовательность возвращаемых функций в зависимости от того, есть ли у вас:

<tag attribute="value"/>

или это:

<tag attribute="value"> </tag>

Иногда вы можете этого хотеть, иногда вам все равно.

1 голос
/ 30 августа 2011

Инструментарий gSOAP автоматически сериализует собственные данные C и C ++ в / из XML и поддерживает полную спецификацию схемы XML посредством привязок данных XML:

gSOAP SourceForge Project

С 1999 года он превратился в значительную базу кода с инструментами и библиотеками для генерации кода. Он поддерживает множество функций привязки данных и настройки, что особенно важно для сопоставления типов схем XML с типами C и C ++. Он может сериализовать любой тип C / C ++, а также контейнеры STL, шаблоны контейнеров и циклические структуры данных. Он использовался в рабочей группе «Шаблоны схем W3C для привязки данных» (с годами охват 100% охватом шаблонов схем). Существует активная база пользователей с открытым исходным кодом, и функциональность разработки gSOAP использовалась во многих промышленных проектах и ​​компаниях из списка Fortune 100 для разработки инфраструктур SOAP / XML.

1 голос
/ 03 ноября 2008

как насчет RapidXML , я использую его в приложении MFC с некоторыми изменениями для поддержки UTF-16 с помощью std :: string. Я вполне доволен этим до сих пор.

0 голосов
/ 22 октября 2008

Мы используем TinyXML для всех наших потребностей XML, будь то MFC или прямой C ++.

http://sourceforge.net/projects/tinyxml

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