Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Промышленные технологии

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, вы можете проверить следующие ссылки:

Лицензия

Библиотека публикуется под MIT License.

Промышленные технологии

  1. Цепь с переключателем: практическое руководство по базовым электрическим цепям
  2. Умножение и деление в научной нотации: правила и примеры
  3. Индустрия 4.0: Интервью с Вереной Майюктке из Bosch.IO об IoT, автоматизации и фабрике будущего
  4. Renesas запускает RX72M MCU с встроенным EtherCAT для промышленной автоматизации
  5. std::map в C++: полное руководство с примерами кода
  6. calloc() в C: выделение обнулённой памяти и практический пример
  7. Освоение функции free() в C: практическое руководство и пример
  8. Обработка XML в Python: руководство по управлению взаимодействующими данными
  9. Освоение ЧПУ-обработки ювелирных изделий: полное руководство
  10. Linq: Мощная библиотека обработки списков для современного C++