Какой синтаксический анализатор с открытым XML лучше всего подходит для C ++? [Дубликат]

228

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

  • 2
    Примечание: есть вопрос о том, как выбрать синтаксический анализатор XML для C ++ .
  • 0
    Как указывает @NicolBolas, в настоящее время существует гораздо более свежая публикация StackOverflow, которая задает тот же вопрос: stackoverflow.com/questions/9387610/…
Показать ещё 1 комментарий
Теги:
open-source

12 ответов

115

Как насчет 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

  • 7
    Мне нравится подход, основанный только на заголовках (я думаю, вам действительно нужен один заголовочный файл). Просто добавьте его и не беспокойтесь об изменении чего-либо в процессе сборки.
  • 6
    Hmmh. если «синтаксический анализатор не проверяет достоверность символов» и «синтаксический анализатор не проверяет уникальность атрибутов», то это, строго говоря, НЕ синтаксический анализатор xml - это не необязательные проверки, обязательные для самой спецификации xml. Я бы не стал тратить свое время на такие вещи, потому что есть и действительно хорошие приличные парсеры (например, libxml2) _
Показать ещё 9 комментариев
84

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

  • 21
    Вау, это много претензий. Вы можете поддержать это? Что делает это лучше в этих областях? Любые справочные статьи?
  • 4
    Читая немного на RapidXML, а также на сайтах pugixml, я понимаю, что вы (вероятно) имеете в виду. RapidXML основан на / вдохновлен pugixml. Имеет минимальную документацию по разбору. У pugixml есть хорошая документация по разбору и хороший API. (Пока только читайте о разборе.)
Показать ещё 6 комментариев
40

Попробуйте TinyXML.

http://sourceforge.net/projects/tinyxml

  • 2
    Использовал tinyXML несколько раз на VC ++ и eVC ++ - всегда работал нормально
  • 3
    или использовать TinyXML 2 grinninglizard.com/tinyxml2/index.html
Показать ещё 2 комментария
15

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 +

14

попробуйте следующее: http://www.applied-mathematics.net/tools/xmlParser.html
это проще и быстрее, чем RapidXML или PUGXML.
TinyXML - худший из "простого анализатора".

  • 1
    Они сделали более новый: application-mathematics.net/tools/IXMLParser.html
  • 3
    Просто предупреждение тем, кто проверяет это, как и я: новая версия имеет действительно странную лицензию, и вы даже не можете скачать ее, не отправив ему письмо по электронной почте. Я думаю, что я пойду с pugixml.
12

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

10

Как насчет 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 и С++, включая связанные с указателем структуры и даже (циклические) графики (а не только деревья).

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

  • 2
    Для коммерческого использования вы должны заплатить единовременную плату за gSoap
9

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

9

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

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

  • 0
    Какие функции у Xerces есть у TinyXML?
  • 0
    Хорошо, ближе к тому, какие из этих функций не имеет TinyXML?
Показать ещё 2 комментария
7

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

  • 2
    Boost.PropertyTree идеально подходит для моего простого хранения данных. Это страница, которая дала понять, как ее использовать. Вау, я люблю повышение.
  • 1
    Boost PropertyTree не очень полезен, за исключением простых файлов XML. Структура не имеет обратной ссылки, поэтому получение родительских узлов означает, что вам действительно нужно свернуть собственную структуру данных для хранения XML после того, как дерево свойств прочитает его. И у него нет поддержки запросов природы xpath. Все, что вы можете легко сделать, это прочитать XML-файл в древовидную структуру и напрямую извлечь значение, если вы знаете точный путь.
Показать ещё 3 комментария
7

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

http://xmlsoft.org/

2

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню