Я создал библиотеку синтаксического анализа пула XML C ++ 11 (например, Java StAX). Вы можете найти его на https://github.com/incoder1/IO.
Пример для чтения XML в структуру POCO.
XML:
<?xml version="1.0" encoding="UTF-8"?>
<configurations>
<configuration id="0" enabled="true">
<name>Test configuration <![CDATA[<0>]]></name>
</configuration>
<configuration id="1" enabled="false">
<name>Test configuration <![CDATA[<1>]]></name>
</configuration>
</configurations>
И код чтения для структуры вроде:
/// A structure to parse into
struct configuration
{
std::size_t id;
bool enabled;
std::string name;
};
Функция чтения (десериализации кода)
static configuration read_config(io::unsafe<io::xml::reader>& rd) {
configuration ret;
io::xml::start_element_event bev = rd.next_tag_begin();
// read id from attribute
io::const_string tmp = bev.get_attribute("id").first;
ret.id = size_t_cast::from_string( tmp.data() );
tmp = bev.get_attribute("enabled").first;
ret.enabled = bool_cast::from_string( tmp.data() );
// read name value from tag
bev = rd.next_tag_begin();
ret.name = std::string( rd.next_characters().data() );
rd.next_tag_end();
// goto </configuration>
rd.next_tag_end();
return ret;
}
Полный пример можно найти по адресу https://github.com/incoder1/IO/tree/master/examples/xml_read
Более сложный пример для Java StAX-подобных баз событий. Анализатор XML можно найти по адресу: https://github.com/incoder1/IO/tree/master/examples/xmlparse
Библиотека нуждается в значке iconv (в POSIX / Unix, например, в ОС, например GNU / Linux, FreeBSD, MacOSX, она включена в libc) и, возможно, в gnutls. GnuTLS предназначен для минимальной поддержки сети и его можно избежать при разборе XML.
Библиотека протестирована с GCC 5+ (GNU / Linux и MinGW64) и MS VC ++ 15. + в Windows (Windows 7, Windows 10) и GNU / Linux (Fedora 23, Fedora 26)
В отличие от синтаксических анализаторов C SAX, libxml2 IO - это библиотека C ++, которая также не основана на обратном вызове.
В отличие от Apache Xerces исключения и RTI могут быть отключены оба.
В отличие от TinyXML, POCO и т. Д. Нет поддержки DOM
Анализатор проверяет только синтаксис XML. Проверка схемы XML через XSD или DTD еще не выполнена.
Спасибо.