TinyXML-2 logo

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

Интерфейс класса выглядит приблизительно так:

class ageXmlNode final
{
public:
   ageXmlNode* first(const char* name = nullptr) const;
   ageXmlNode* next(const char* name = nullptr) const;

   template<typename T>
   T getValue(const char* name, const T& def) const;
};

Что позволяет прочесть значение любого атрибута, представив его как нужный тип – int, float, struct/class…

В качестве парсера я долгие годы использовал стабильный и широкоиспользуемый TinyXML.
Но пришло время заменить TinyXML на что-то более шустрое. Выбирал между TinyXML-2, pugixml и RapidXml.

Согласно бенчмарков pugixml, он самый быстрый из протестированных автором. Следом идет RapidXml и с большим отставанием за ним идет TinyXML-2.

Я не стал доверять бенчмаркам автора pugixml и провел свои тесты на том наборе данных, которые использую я в реальных проектах. И в моем случае pugixml оказался не столь быстр. Поэтому свой выбор остановил на проверенном ранее решении в лице TinyXML-2.

Результат переходна на TinyXML-2 я доволен – время парсинга XML сократилось в 5-10 раз.

  • Домашняя страница TinyXML-2
  • Домашняя страница TinyXML
  • Домашняя страница pugixml
  • Домашняя страница RapidXml