какой лучший синтаксический анализатор открытого xml для c ++?

<p>я ищу простой, чистый, правильный анализатор xml для использования в моем проекте c++. должен ли я написать свой собственный?</p>

<p>как насчет <a href="http://rapidxml.sourceforge.net/"><strong> rapidxml </strong></a> ? rapidxml - это очень быстрый и небольшой анализатор xml dom, написанный на c++. он предназначен в первую очередь для встраиваемых сред, компьютерных игр или любых других приложений, где доступная память или процессорная мощность имеют первостепенное значение. rapidxml лицензируется в рамках boost software license, и его исходный код находится в свободном доступе.</p><p><strong> особенности </strong></p><ul> <li>скорость синтаксического анализа (включая построение дерева dom) приближается к скорости функции strlen, выполняемой для тех же данных.</li> <li>на современном процессоре (по состоянию на 2008 г.) пропускная способность синтаксического анализатора составляет около 1 миллиарда символов в секунду. см. раздел "производительность" в онлайн-руководстве.</li> <li>небольшой объем памяти кода и созданных деревьев dom.</li> <li>реализация только для заголовков, упрощающая процесс интеграции.</li> <li>простая лицензия, позволяющая использовать ее практически в любых целях, как коммерческих, так и некоммерческих, без каких-либо обязательств.</li> <li>поддерживает кодировки utf-8 и частично utf-16, utf-32.</li> <li>переносимый исходный код без каких-либо зависимостей, кроме очень небольшого подмножества стандартной библиотеки c++.</li> <li>это подмножество настолько мало, что его легко эмулировать вручную, если использование стандартной библиотеки нежелательно.</li> </ul><p><strong> ограничения </strong></p><ul> <li>парсер игнорирует объявления doctype.</li> <li>нет поддержки пространств имен xml.</li> <li>парсер не проверяет правильность символов.</li> <li>интерфейс парсера не соответствует спецификации dom.</li> <li>парсер не проверяет уникальность атрибута.</li> </ul><p>источник: <a href="http://en.wikipedia.org/wiki/rapidxml">wikipedia.org http://rapidxml</a> </p><hr><p>в зависимости от того, что вы используете, вы можете использовать привязку данных xml? <a href="http://www.codesynthesis.com/products/xsd/"><strong> codesynthesis xsd </strong></a> - это компилятор привязки данных xml для c++, разработанный code synthesis и имеющий двойную лицензию под gnu gpl и проприетарная лицензия. учитывая спецификацию экземпляра xml (xml schema), он генерирует классы c++, которые представляют данный словарь, а также код синтаксического анализа и сериализации.</p><p>одной из уникальных особенностей codesynthesis xsd является его поддержка двух различных отображений xml-схемы на c++: c++/tree в памяти и потоково-ориентированный c++/parser. c++/tree mapping - это традиционное отображение с древовидной структурой данных в памяти. c++/parser - это новое sax-подобное отображение, которое представляет информацию, хранящуюся в экземплярах xml-документов, в виде иерархии событий синтаксического анализа, характерных для словаря. по сравнению с c++/tree отображение c++/parser позволяет обрабатывать большие xml-документы, которые не помещаются в памяти, выполнять потоковую обработку или использовать существующее представление в памяти.</p><p>источник: <a href="http://en.wikipedia.org/wiki/codesynthesis\_xsd">wikipedia.org http://codesynthesis xsd</a> </p>

<p> <a href="https://github.com/zeux/pugixml">pugixml</a> - легкий, простой и быстрый синтаксический анализатор xml для c++ очень маленький (сравнимый с rapidxml), очень быстрый (сравнимый с rapidxml), очень простой в использовании (<strong> лучше </strong> чем rapidxml).</p>

<p>попробуйте tinyxml.</p><p> <a href="http://sourceforge.net/projects/tinyxml">http://sourceforge.net/projects/tinyxml</a> </p>

<p> <a href="http://code.google.com/p/ticpp/">ticpp</a> является версией tinyxml с более "c ++".</p><blockquote> <p>"ticpp" - это сокращение от официального названия tinyxml ++. это совершенно новый интерфейс для tinyxml ( <a href="http://www.grinninglizard.com/tinyxml/">http://www.grinninglizard.com/tinyxml/</a> ), который использует много сильных сторон c++. шаблоны, исключения и намного лучшая обработка ошибок. это также полностью зарегистрировано в 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+</p> </blockquote>

<p>попробуйте это: <a href="http://www.applied-mathematics.net/tools/xmlparser.html">http://www.applied-mathematics.net/tools/xmlparser.html</a> <br> это проще и быстрее, чем rapidxml или pugxml.<br> tinyxml - худший из "простого парсера".</p>

<p>не используйте tinyxml, если вы беспокоитесь об эффективности/управлении памятью (он имеет тенденцию выделять <em> много </em> крошечных блоков). мой личный фаворит <a href="http://rapidxml.sourceforge.net/">rapidxml</a> .</p>

<p>как насчет <a href="http://sourceforge.net/projects/gsoap2">gsoap</a> ? это с открытым исходным кодом и свободно доступны под лицензией gpl. несмотря на свое название, инструментарий gsoap является универсальным инструментом связывания данных xml и позволяет автоматически связывать данные c и c++ с xml. нет необходимости использовать api синтаксического анализатора xml, просто позвольте ему читать/записывать ваши данные в формате xml для вас. если вам действительно нужен супер-простой синтаксический анализатор c++ xml, тогда gsoap может оказаться излишним. но во всем остальном он работал хорошо, как показывают отзывы для многих промышленных приложений с момента появления gsoap в 2001 году.</p><p>вот краткий список возможностей:</p><ul> <li>портативный: windows, linux, mac os x, unix, vxworks, symbian, palm os, wince и т.д.</li> <li>небольшая площадь: код 73 кб и данные менее 2 кб для реализации клиентского приложения веб-службы xml (без dom для ограничения использования памяти).</li> <li>быстро: не верьте тому, что утверждают другие инструменты, истинную скорость следует измерять <strong> с помощью </strong> ввода/вывода. для gsoap это более 3000 двусторонних xml-сообщений по tcp/ip. затраты на синтаксический анализ xml незначительны, так как это простое линейное сканирование ввода/вывода, когда происходит (де) сериализация.</li> <li>поддержка xml: импорт/экспорт схемы xml (xsd), импорт/экспорт wsdl, пространства имен xml, канонизация xml, xml с вложениями (mime), необязательное использование dom, множество опций для создания xml с отступами, использование строк utf8 и т.д.</li> <li>проверка xml: частичная и полная (опция)</li> <li>поддержка ws: ws-security, ws-reliablemessaging, ws-addressing, ws-policy, ws-securitypolicy и другие.</li> <li>отладка: интегрированное управление памятью с обнаружением утечек, ведение журнала.</li> <li>api: api не нужно изучать, только инициализация контекста движка "мыло", затем используйте интерфейс чтения/записи для ваших данных и уничтожение контекста движка "мыло".</li> </ul><p>например:</p><pre class="lang-cxx prettyprint-override"><code>class address { std::string name; std::vector<long64> number; time\_t date; }; </code></pre><p>затем запустите "soapcpp2" в приведенном выше объявлении класса <code>address</code>, чтобы сгенерировать средство чтения и записи xml <code>soap\_read\_address</code> и <code>soap\_write\_address</code>, например:</p><pre class="lang-cxx prettyprint-override"><code>address *a = new address(); a = ...; soap ctx = soap\_new(); soap\_write\_address(ctx, a); soap\_end(ctx); soap\_free(ctx);` </code></pre><p>это создает xml-представление объекта <code>address a</code>. аннотируя объявления файла заголовка деталями пространства имен xml (здесь не показано), инструменты также генерируют схемы. это простой пример. инструменты gsoap могут обрабатывать очень широкий диапазон типов данных c и c++, включая основанные на указателе связанные структуры и даже (циклические) графы (а не только деревья).</p><p>надеюсь это поможет.</p>

<p>я новичок в c++ <strong> </strong> и, попробовав несколько разных предложений на этой странице, должен сказать, что мне больше нравится <a href="http://code.google.com/p/pugixml/">pugixml</a> . он имеет легкую для понимания документацию и api высокого уровня, и это было все, что я искал.</p>

<p>tinyxml может быть лучше для простой работы с xml, но если вам нужно больше возможностей, попробуйте xerces из проекта apache. перейдите на следующую страницу, чтобы узнать больше о его функциях.</p><p> <a href="http://xerces.apache.org/xerces-c/">http://xerces.apache.org/xerces-c/</a> </p>

<p>tinyxml, а также boost.propertytree. последний не соответствует всем официальным требованиям, но очень прост.</p>

<p>мне нравится парсер gnome xml. он с открытым исходным кодом (лицензия mit, поэтому вы можете использовать его в коммерческих продуктах), быстрый и имеет интерфейсы на основе dom и sax.</p><p> <a href="http://xmlsoft.org/">http://xmlsoft.org/</a> </p>

<p>попробуйте <a href="http://sourceforge.net/projects/tinyxml">tinyxml</a> или <a href="http://www.ambiera.com/irrxml/">irrxml</a> ... оба являются легковесными парсерами xml (в любом случае, я бы посоветовал вам использовать tinyxml).</p>