pugixml: Parsing XML eficiente con soporte nativo XPATH
Resumen
En este artículo explicaré cómo usar pugixml para procesar datos XML. Con esta biblioteca de procesamiento puede usar un parser DOM para leer y manipular nodos y la notación XPATH para consultar nodos.
Cómo compilar
Para compilar las fuentes, debe descargar una release desde https://github.com/zeux/pugixml/tags. Ahora puede compilar cruzado la fuente con el toolchain de PLCnext dado por Phoenix Contact. El siguiente fragmento de código mostrará el script cmake para compilar cruzado.
# Por favor, establezca las variables de entorno según sus necesidades
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ómo usar
Primero debe integrar el header C++ y la biblioteca en su entorno de proyecto. Cuando haya terminado, puede usar el procesamiento pugixml.
Cargar un documento
pugi::xml_document doc;
pugi::xml_parse_result result = doc.load_file("data.xml");
...
Recorrer subnodos desde un nodo dado
Puede recorrer a través del árbol DOM y también manipular los nodos.
pugi::xpath_node_set tools = doc.select_nodes("/Profile/Tools/Tool");
// recorrer subnodos
for (pugi::xml_node tool: tools) {
std::cout << " " << tool.name();
// obtener atributos
for (pugi::xml_attribute attr: tool.attributes()) {
std::cout << " " << attr.name() << "=" << attr.value();
}
}
Usar XPATH
XPATH le da la libertad de acceder a nodos y atributos muy fácilmente.
// acceder a nodo
pugi::xpath_node_set tools = doc.select_nodes("/Profile/Tools/Tool");
pugi::xpath_node_set all_tools = doc.select_nodes("//Tool");
// acceder a atributos
auto docIdNode = doc.select_node("@ID");
auto docIdNode_One = doc.select_node("//Tool[@ID==1]");
Guardar documento XML
Puede guardar el documento XML.
doc.save_file("new_data.xml");
Más Información
Si está interesado en obtener más información sobre pugixml puede consultar los siguientes enlaces:
- GitHub: https://github.com/zeux/pugixml
- Sitio web: https://pugixml.org/
Licencia
La biblioteca está publicada bajo Licencia MIT.
Tecnología Industrial
- Simplificando la impresión 3D de metal: Consejos de expertos para gestionar estructuras de soporte
- Circuito con interruptor: guía práctica de circuitos eléctricos básicos
- Dominando Multiplicación y División con Notación Científica
- Industria 4.0: Preguntas y respuestas con Verena Majuntke de Bosch.IO sobre IoT, automatización y la fábrica del futuro
- Dominando el Mecanizado CNC de Joyería: Guía Completa
- Linq: Potente biblioteca de procesamiento de listas para C++ moderno
- Renesas lanza MCUs RX72M con EtherCAT integrado para automatización industrial
- Dominando std::map en C++: Guía completa con ejemplos de código
- calloc() en C: Asignación de memoria inicializada a cero y ejemplo práctico
- Dominando la función free() en C: Guía práctica y ejemplo
- Procesamiento XML en Python: Guía para Gestión de Datos Interoperables