Какой лучший открытый синтаксический анализатор XML для С++?

Я ищу простой, чистый, правильный XML-синтаксис для использования в моем проекте на С++. Должен ли я писать свой собственный?

Ответ 1

Как насчет RapidXML? RapidXML - очень быстрый и маленький XML-анализатор DOM, написанный на С++. Он ориентирован прежде всего на встроенные среды, компьютерные игры или любые другие приложения, в которых доступная память или процессорная мощность процессора достигают больших премий. RapidXML лицензируется в соответствии с лицензией на программное обеспечение Boost и его исходный код свободно доступен.

Функции

  • Скорость обработки (включая дерево DOM) здание), приближающаяся скорость функция strlen, выполняемая на те же данные.
  • На современном процессоре (по состоянию на 2008 год) пропускная способность парсера составляет около 1 миллиарда символов в секунду. Видеть Раздел производительности в Интернете Вручную.
  • Малый объем памяти для кода и создали деревья DOM.
  • Реализация только заголовков, упрощая процесс интеграции.
  • Простая лицензия, позволяющая использовать почти любая цель, как коммерческая и некоммерческие, без каких-либо обязательства.
  • Поддержка UTF-8 и частично UTF-16, UTF-32.
  • Портативный исходный код без зависимостей, отличных от очень малых подмножество стандартной библиотеки С++.
  • Это подмножество настолько мало, что оно может легко эмулироваться вручную, если использовать стандартной библиотеки нежелательно.

Ограничения

  • Парсер игнорирует DOCTYPE деклараций.
  • Поддержка пространств имен XML отсутствует.
  • Парсер не проверяет символа.
  • Интерфейс анализатора не соответствуют спецификации DOM.
  • Парсер не проверяет атрибут уникальности.

Источник: wikipedia.org://Rapidxml


В зависимости от использования вы можете использовать привязку данных XML? CodeSynthesis XSD - это компилятор привязки XML-данных для С++, разработанный Code Synthesis и имеющий двойную лицензию под GNU GPL и патентованная лицензия. Учитывая спецификацию экземпляра XML (XML Schema), он генерирует классы С++, которые представляют данный словарь, а также код синтаксического анализа и сериализации.

Одной из уникальных особенностей CodeSynthesis XSD является поддержка двух разных сопоставлений XML-схемы и С++: встроенный С++/Tree и поточно-ориентированный С++/Parser. Отображение С++/Tree является традиционным сопоставлением с древовидной структурой данных в памяти. С++/Parser - это новое SAX-подобное сопоставление, которое представляет информацию, хранящуюся в документах экземпляра XML, как иерархию событий синтаксического анализа, специфичных для словаря. По сравнению с С++/Tree, сопоставление С++/Parser позволяет обрабатывать большие XML-документы, которые не поместились бы в памяти, выполнять поточно-ориентированную обработку или использовать существующее представление в памяти.

Источник: wikipedia.org://CodeSynthesis XSD

Ответ 2

pugixml - Легкий, простой и быстрый XML-синтаксический анализатор для С++ Очень маленький (сравнимый с RapidXML), очень быстрый (сравнимый с RapidXML), очень прост в использовании ( лучше, чем RapidXML).

Ответ 4

TiCPP является "более С++" версией TinyXML.

'TiCPP' сокращен для официального названия TinyXML ++. Это совершенно новый интерфейс для TinyXML (http://www.grinninglizard.com/tinyxml/), который использует МНОГИЕ сильных сторон С++. Шаблоны, исключения и намного лучшая обработка ошибок. Он также полностью документирован в doxygen. Это действительно здорово, потому что эта версия позволяет вам взаимодействовать с крошечным точно так же, как и раньше, или вы можете использовать новые классы "ticpp". Все, что вам нужно сделать, это определить TIXML_USE_TICPP. Он был протестирован в VC 6.0, VC 7.0, VC 7.1, VC 8.0, MinGW gcc 3.4.5 и в Linux GNU gcc 3 +

Ответ 6

Не используйте TinyXML, если вас беспокоит эффективность/управление памятью (он имеет тенденцию выделять множество крошечных блоков). Мой личный фаворит RapidXML.

Ответ 7

Как насчет gSOAP? Он является открытым исходным кодом и свободно доступен под лицензией GPL. Несмотря на свое название, набор инструментов gSOAP является универсальным инструментом привязки данных XML и позволяет автоматически связывать ваши данные C и С++ с XML. Нет необходимости использовать XML-парсер API, просто дайте ему возможность читать/записывать ваши данные в формате XML для вас. Если вам действительно нужен суперпростой С++ XML-парсер, то gSOAP может быть излишним. Но для всего остального он хорошо зарекомендовал себя во многих промышленных приложениях, поскольку gSOAP был представлен в 2001 году.

Вот краткий список возможностей:

  • Portable: Windows, Linux, Mac OS X, Unix, VxWorks, Symbian, Palm OS, WinCE и т.д.
  • Малая занимаемая площадь: код 73 КБ и менее 2 тыс. данных для реализации клиентского приложения веб-сервиса XML (без ограничения объема памяти для DOM).
  • Быстро: не верьте, что требуют другие инструменты, истинная скорость должна быть измерена с помощью ввода/вывода. Для gSOAP это более чем 3000 XML-сообщений с круговым движением по TCP/IP. Накладные расходы на разбор XML незначительны, так как это простое линейное сканирование ввода/вывода, в то время как сериализация (де) происходит.
  • Поддержка XML: импорт/экспорт XML-схемы (XSD), импорт/экспорт WSDL, пространства имен XML, канонизация XML, XML с вложениями (MIME), необязательное использование DOM, множество опций для создания XML с отступом, использование строк UTF8, и др.
  • Проверка XML: частичная и полная (опция)
  • Поддержка WS: WS-Security, WS-ReliableMessaging, WS-Addressing, WS-Policy, WS-SecurityPolicy и другие.
  • Отладка: интегрированное управление памятью с обнаружением утечек, протоколирование.
  • API: нет API для изучения, только инициализация контекста ядра "мыла", затем используйте интерфейс чтения/записи для ваших данных и "разрушение контекста" мыльного устройства.

Например:

class Address { std::string name; std::vector<LONG64> number; time_t date; };

Затем запустите "soapcpp2" в объявлении класса Address выше, чтобы сгенерировать читатели и писатели XML soap_read_Address и soap_write_Address, например:

Address *a = new Address(); a = ...; soap ctx = soap_new(); soap_write_Address(ctx, a); soap_end(ctx); soap_free(ctx);

Это создает XML-представление объекта Address a. Аннотируя декларации файла заголовка с данными пространства имен XML (не показаны здесь), инструменты также генерируют схемы. Это простой пример. Инструменты gSOAP могут обрабатывать очень широкий диапазон типов данных C и С++, включая связанные с указателем структуры и даже (циклические) графики (а не только деревья).

Надеюсь, что это поможет.

Ответ 8

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

http://xerces.apache.org/xerces-c/

Ответ 9

Я являюсь С++ новичком и, попробовав пару разных предложений на этой странице, я должен сказать, что мне нравится pugixml самый. У этого есть легкая для понимания документация и API высокого уровня, который был все, что я искал.

Ответ 10

Мне нравится Gnome xml parser. Это открытый исходный код (лицензия MIT, поэтому вы можете использовать ее в коммерческих продуктах), быстро и имеет интерфейсы на основе DOM и SAX.

http://xmlsoft.org/

Ответ 11

TinyXML, а также Boost.PropertyTree. Последний не отвечает всем официальным требованиям, но очень прост.

Ответ 12

Попробуйте TinyXML или IrrXML... Оба являются легкими анализаторами XML (я бы предложил вам использовать TinyXML, так или иначе).