pugixml — Эффективный парсинг XML с нативной поддержкой XPATH
Аннотация
В этой статье я объясню, как использовать pugixml для обработки XML-данных. С этой библиотекой обработки вы можете использовать DOM-парсер для чтения и манипуляции узлами и нотацию XPATH для запроса узлов.
Как собрать
Для сборки исходников нужно скачать релиз с https://github.com/zeux/pugixml/tags. Теперь вы можете кросскомпилировать исходники с тулчейном PLCnext, предоставляемым Phoenix Contact. Следующий фрагмент кода покажет cmake скрипт для кросскомпиляции.
# Please set the environment variables to your needs
cmake \
-G "Unix Makefiles" \
-D CMAKE_BUILD_TYPE=Release \
-D BUILD_TESTING=OFF \
-D BUILD_SHARED_LIBS=ON \
-D "CMAKE_STAGING_PREFIX=${CMAKE_STAGING_PREFIX}" \
-D "CMAKE_INSTALL_PREFIX=${CMAKE_STAGING_PREFIX}" \
-D "CMAKE_TOOLCHAIN_FILE=${ARP_TOOLCHAIN_FILE}" \
-D "ARP_TOOLCHAIN_ROOT= ${ARP_TOOLCHAIN_ROOT}" \
-D BUILD_TESTS=OFF \
-S "${SOURCE_DIRECTORY}" \
-B "${BUILD_DIRECTORY}"
cmake --build "${BUILD_DIRECTORY}" --target install
Как использовать
Сначала нужно интегрировать C++ header и библиотеку в окружение вашего проекта. Когда это сделано, вы можете использовать обработку pugixml.
Загрузка документа
pugi::xml_document doc;
pugi::xml_parse_result result = doc.load_file("data.xml");
...
Обход подузлов от заданного узла
Вы можете обходить через DOM-дерево и также манипулировать узлами.
pugi::xpath_node_set tools = doc.select_nodes("/Profile/Tools/Tool");
// обход подузлов
for (pugi::xml_node tool: tools) {
std::cout << " " << tool.name();
// получение атрибутов
for (pugi::xml_attribute attr: tool.attributes()) {
std::cout << " " << attr.name() << "=" << attr.value();
}
}
Использование XPATH
XPATH дает свободу доступа к узлам и атрибутам очень легко.
// доступ к узлу
pugi::xpath_node_set tools = doc.select_nodes("/Profile/Tools/Tool");
pugi::xpath_node_set all_tools = doc.select_nodes("//Tool");
// доступ к атрибутам
auto docIdNode = doc.select_node("@ID");
auto docIdNode_One = doc.select_node("//Tool[@ID==1]");
Сохранение XML документа
Вы можете сохранить XML документ.
doc.save_file("new_data.xml");
Дополнительная информация
Если вы заинтересованы в получении большей информации о pugixml, вы можете проверить следующие ссылки:
- GitHub: https://github.com/zeux/pugixml
- Website: https://pugixml.org/
Лицензия
Библиотека публикуется под MIT License.
Промышленные технологии
- Цепь с переключателем: практическое руководство по базовым электрическим цепям
- Умножение и деление в научной нотации: правила и примеры
- Индустрия 4.0: Интервью с Вереной Майюктке из Bosch.IO об IoT, автоматизации и фабрике будущего
- Renesas запускает RX72M MCU с встроенным EtherCAT для промышленной автоматизации
- std::map в C++: полное руководство с примерами кода
- calloc() в C: выделение обнулённой памяти и практический пример
- Освоение функции free() в C: практическое руководство и пример
- Обработка XML в Python: руководство по управлению взаимодействующими данными
- Освоение ЧПУ-обработки ювелирных изделий: полное руководство
- Linq: Мощная библиотека обработки списков для современного C++