#include <stdio.h>
#include <oraxml.h>
#define BUFFER_SIZE 1024
int main() { oratext* xmlFile = (oratext*)"input.xml"; // Ruta y nombre del archivo XML de entrada
oratext* xslFile = (oratext*)"stylesheet.xsl"; // Ruta y nombre del archivo XSL de transformación
oratext* htmlFile = (oratext*)"output.html"; // Ruta y nombre del archivo HTML de salida
// Inicializar el entorno XML
if (XMLInit() != XML_SUCCESS) { printf("Error al inicializar el entorno XML\n"); return 1;
}
// Inicializar la estructura XMLParserCtxt
XMLParserCtxt* parserCtxt = XMLParserCreateCtxt(NULL, NULL, NULL);
if (parserCtxt == NULL) { printf("Error al crear el contexto del analizador XML\n"); XMLTerm();
return 1;
}
// Crear el analizador XML
XMLParser* parser = XMLCreateParser(parserCtxt);
if (parser == NULL) { printf("Error al crear el analizador XML\n"); XMLFreeParserCtxt(parserCtxt);
XMLTerm();
return 1;
}
// Analizar el archivo XML de entrada
if (!XMLParseFile(parser, xmlFile)) { printf("Error al analizar el archivo XML\n"); XMLFreeParser(parser);
XMLFreeParserCtxt(parserCtxt);
XMLTerm();
return 1;
}
// Crear la estructura XSLProcessorCtxt
XSLProcessorCtxt* processorCtxt = XSLProcessorCreateCtxt(NULL, NULL, NULL);
if (processorCtxt == NULL) { printf("Error al crear el contexto del procesador XSL\n"); XMLFreeParser(parser);
XMLFreeParserCtxt(parserCtxt);
XMLTerm();
return 1;
}
// Cargar el archivo XSL de transformación
if (!XSLSetStylesheetFile(processorCtxt, xslFile)) { printf("Error al cargar el archivo XSL\n"); XSLFreeProcessorCtxt(processorCtxt);
XMLFreeParser(parser);
XMLFreeParserCtxt(parserCtxt);
XMLTerm();
return 1;
}
// Aplicar la transformación XSL al archivo XML de entrada
if (!XSLProcess(processorCtxt, parser)) { printf("Error al aplicar la transformación XSL\n"); XSLFreeProcessorCtxt(processorCtxt);
XMLFreeParser(parser);
XMLFreeParserCtxt(parserCtxt);
XMLTerm();
return 1;
}
// Obtener la salida HTML generada por la transformación
XSLStringCtxt* stringCtxt = XSLCreateStringCtxt(processorCtxt);
if (stringCtxt == NULL) { printf("Error al crear el contexto de salida de cadena\n"); XSLFreeProcessorCtxt(processorCtxt);
XMLFreeParser(parser);
XMLFreeParserCtxt(parserCtxt);
XMLTerm();
return 1;
}
char buffer[BUFFER_SIZE];
size_t bytesRead;
FILE* outputFile = fopen(htmlFile, "w");
if (outputFile == NULL) { printf("Error al abrir el archivo HTML de salida\n"); XSLFreeStringCtxt(stringCtxt);
XSLFreeProcessorCtxt(processorCtxt);
XMLFreeParser(parser);
XMLFreeParserCtxt(parserCtxt);
XMLTerm();
return 1;
}
while ((bytesRead = XSLGetBytes(stringCtxt, buffer, BUFFER_SIZE)) > 0) { fwrite(buffer, 1, bytesRead, outputFile);
}
fclose(outputFile);
// Liberar los recursos
XSLFreeStringCtxt(stringCtxt);
XSLFreeProcessorCtxt(processorCtxt);
XMLFreeParser(parser);
XMLFreeParserCtxt(parserCtxt);
XMLTerm();
printf("Transformación completada con éxito\n");
return 0;
}