XML - Extraer información de un tag < > ...</&g

 
Vista:

Extraer información de un tag < > ...</&g

Publicado por Eric (1 intervención) el 23/02/2007 13:23:42
Hola buenas,

estoy utilizando xerces para parsear un xml en visual c++, y kiero almacenar el contenido de un tag con todos los hijos y elementos y todo lo k tenga en su interior en una cadena. Me gustaria saber si esto es posible o alguien ha hecho algo parecido, yo d momento no he encontrado la solución.

Saludos y gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Almacenar contenido de un tag y sus hijos en una cadena utilizando Xerces en Visual C++

Publicado por Alejandro (258 intervenciones) el 14/07/2023 16:43:21
Sí, Eric, es posible almacenar el contenido de un tag y todos sus hijos en una cadena utilizando Xerces en Visual C++. Aquí tienes un ejemplo de cómo puedes lograrlo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#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;
}

Asegúrate de reemplazar `"ruta/al/archivo.xml"` con la ruta real de tu archivo XML y `"nombre_del_tag"` con el nombre del tag que deseas obtener.

Este código utiliza Xerces para analizar el archivo XML y obtener el contenido del primer tag con el nombre especificado. La función `obtenerContenidoTag` se encarga de recorrer los hijos del tag y sus descendientes, concatenando el contenido en una cadena.

Recuerda que necesitarás configurar correctamente tu proyecto de Visual C++ para incluir las bibliotecas y encabezados de Xerces. Además, ten en cuenta que este es un ejemplo básico y puede requerir modificaciones adicionales según tu contexto y requisitos específicos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar