#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;
}