#include <xercesc/dom/DOM.hpp>
#include <xercesc/dom/DOMDocument.hpp>
#include <xercesc/dom/DOMNode.hpp>
#include <xercesc/parsers/XercesDOMParser.hpp>
#include <xercesc/util/XMLString.hpp>
#include <iostream>
#include <string>
XERCES_CPP_NAMESPACE_USE
std::string obtenerContenidoTag(const DOMNode* nodo) {
XMLCh* contenido = XMLString::transcode("");
const DOMNode* hijoActual = nodo->getFirstChild();
while (hijoActual) {
if (hijoActual->getNodeType() == DOMNode::ELEMENT_NODE) {
XMLCh* contenidoHijo = obtenerContenidoTag(hijoActual);
XMLString::catString(contenido, contenidoHijo);
XMLString::release(&contenidoHijo);
} else if (hijoActual->getNodeType() == DOMNode::TEXT_NODE) {
XMLCh* contenidoTexto = XMLString::transcode(hijoActual->getNodeValue());
XMLString::catString(contenido, contenidoTexto);
XMLString::release(&contenidoTexto);
}
hijoActual = hijoActual->getNextSibling();
}
std::string contenidoString = XMLString::transcode(contenido);
XMLString::release(&contenido);
return contenidoString;
}
int main() {
XMLPlatformUtils::Initialize();
const char* archivoXML = "ruta/al/archivo.xml";
XercesDOMParser parser;
try {
parser.parse(archivoXML);
DOMDocument* documento = parser.getDocument();
DOMNodeList* listaTags = documento->getElementsByTagName(X("nombre_del_tag"));
if (listaTags->getLength() > 0) {
DOMNode* primerTag = listaTags->item(0);
std::string contenidoTag = obtenerContenidoTag(primerTag);
std::cout << "Contenido del tag: " << contenidoTag << std::endl;
} else {
std::cout << "No se encontraron tags con el nombre especificado." << std::endl;
}
} catch (const XMLException& e) {
char* mensajeError = XMLString::transcode(e.getMessage());
std::cout << "Error al parsear el archivo XML: " << mensajeError << std::endl;
XMLString::release(&mensajeError);
} catch (const SAXParseException& e) {
char* mensajeError = XMLString::transcode(e.getMessage());
std::cout << "Error de sintaxis XML: " << mensajeError << std::endl;
XMLString::release(&mensajeError);
} catch (...) {
std::cout << "Error desconocido al parsear el archivo XML." << std::endl;
}
XMLPlatformUtils::Terminate();
return 0;
}