pugixml – Analyse XML efficace avec support XPATH natif
Résumé
Cet article explique comment utiliser pugixml pour traiter des données XML. Cette bibliothèque de traitement permet d'utiliser un parseur DOM pour lire et manipuler les nœuds, et la notation XPATH pour interroger les nœuds.
Comment compiler
Pour compiler les sources, téléchargez une release depuis https://github.com/zeux/pugixml/tags. Puis cross-compilez avec la toolchain PLCnext fournie par Phoenix Contact. Le snippet ci-dessous montre le script cmake pour la cross-compilation.
# Adaptez les variables d'environnement à vos besoins
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
Comment utiliser
Intégrez d'abord le header C++ et la bibliothèque dans votre environnement de projet. Une fois fait, vous pouvez utiliser le traitement pugixml.
Charger un document
pugi::xml_document doc;
pugi::xml_parse_result result = doc.load_file("data.xml");
...
Parcourir les sous-nœuds depuis un nœud donné
Vous pouvez parcourir l'arbre DOM et manipuler les nœuds.
pugi::xpath_node_set tools = doc.select_nodes("/Profile/Tools/Tool");
// parcours des sous-nœuds
for (pugi::xml_node tool: tools) {
std::cout << " " << tool.name();
// récupération des attributs
for (pugi::xml_attribute attr: tool.attributes()) {
std::cout << " " << attr.name() << "=" << attr.value();
}
}
Utiliser XPATH
XPATH permet d'accéder facilement aux nœuds et attributs.
// accès à un nœud
pugi::xpath_node_set tools = doc.select_nodes("/Profile/Tools/Tool");
pugi::xpath_node_set all_tools = doc.select_nodes("//Tool");
// accès aux attributs
auto docIdNode = doc.select_node("@ID");
auto docIdNode_One = doc.select_node("//Tool[@ID==1]");
Sauvegarder un document XML
Vous pouvez sauvegarder le document XML.
doc.save_file("new_data.xml");
Plus d'informations
Pour en savoir plus sur pugixml :
- GitHub : https://github.com/zeux/pugixml
- Site web : https://pugixml.org/
Licence
La bibliothèque est publiée sous licence MIT.
Technologie industrielle
- Maîtriser multiplication et division en notation scientifique
- Industrie 4.0 : Questions-réponses avec Verena Majuntke de Bosch.IO sur l'IoT, l'automatisation et l'usine du futur
- Renesas lance RX72M : MCUs avec EtherCAT intégré pour automatisation industrielle
- Maîtriser std::map en C++ : Guide complet avec exemples de code
- calloc() en C : Allocation mémoire initialisée à zéro et exemple pratique
- Maîtriser la fonction free() en C : Guide pratique et exemple
- Traitement XML en Python : Guide pour la gestion de données interopérables
- Maîtriser l'usinage CNC de bijouterie : guide complet
- Linq : puissante bibliothèque de traitement de listes pour C++ moderne