[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [xml] Exslt Transform with Params



Hi,

I can't comment on memory leaks in your app, but you could
use xmlMemDisplay() or xmlMemoryDump() to check for leaks.
Additionally I call Libxslt's initialization and finalization
functions:

xmlInitParser();
xsltInit();

... my code ...

xsltCleanupGlobals();
xmlCleanupParser();
xmlMemDisplay(stdout);

Regards,

Kasimier


> -----Original Message-----
> From: xml-bounces gnome org [mailto:xml-bounces gnome org] On 
> Behalf Of Alex Neblett
> Sent: Tuesday, June 20, 2006 7:35 AM
> To: xml gnome org
> Subject: [xml] Exslt Transform with Params
> 
> Hello,
> 
> I have written the following c++ code to allow me to use do 
> exslt transforms
> using libxml2/libxslt/libexslt from C# using .NET 1.1 on the Windows
> platform.
> 
> In doing so, I based it upon the api's and sample code.
> 
> I would like to make sure that it does not memory leak and that I have
> called the api's appropriately and not forgotten anything.
> 
> The code presently works. I am open to any and all 
> suggestions for improving
> it.
> 
> Kind Regards,
> 
> Alex
> 
> 
> // exslt.h: Headers for the DLL application.
> 
> // The following ifdef block is the standard way of creating 
> macros which
> make exporting 
> // from a DLL simpler. All files within this DLL are compiled with the
> EXSLT_EXPORTS
> // symbol defined on the command line. this symbol should not 
> be defined on
> any project
> // that uses this DLL. This way any other project whose 
> source files include
> this file see 
> // EXSLT_API functions as being imported from a DLL, whereas 
> this DLL sees
> symbols
> // defined with this macro as being exported.
> #ifdef EXSLT_EXPORTS
> #define EXSLT_API __declspec(dllexport)
> #else
> #define EXSLT_API __declspec(dllimport)
> #endif
> 
> EXSLT_API int ClearParms(void);
> EXSLT_API int AddParams (char* paramname, char* paramvalue);
> EXSLT_API int exslttransform(const char* xmlstring, const 
> char* xsltstring,
> const char* resultfile);
> EXSLT_API int exslttransformxmlfile(const char* xmlstring, const char*
> xsltstring, const char* resultfile);
> 
> 
> 
> // exslt.c: Defines the entry point for the DLL application.
> //
> 
> #include "exslt.h"
> 
> #include <string.h>
> 
> #include <libxml/xmlmemory.h>
> #include <libxml/debugXML.h>
> #include <libxml/HTMLtree.h>
> #include <libxml/xmlIO.h>
> #include <libxml/DOCBparser.h>
> #include <libxml/xinclude.h>
> #include <libxml/catalog.h>
> 
> #include <libxslt/xslt.h>
> #include <libxslt/xsltInternals.h>
> #include <libxslt/transform.h>
> #include <libxslt/xsltutils.h>
> 
> #include <libexslt/exslt.h>
> #include <libexslt/exsltconfig.h>
> #include <libexslt/exsltexports.h>
> #include <libexslt/libexslt.h>
> 
> char params[100][512];
> int nbparams = 0;
> 
> EXSLT_API int AddParams(char* paramname, char* paramvalue)
> {
> 	int i;
> 	int k;
> 	i = 0;
> 	k = 0;
> 	// Make paramvalue ASCII and end with NULL
> 	while (paramvalue[i] != '\0')
> 	{
> 		if (paramvalue[i] < 128 && paramvalue[i] > 0)
> 		{
> 			paramvalue[k] = paramvalue[i];
> 			k++;
> 		}
> 		i++;
> 	}
> 	while (k < i)
> 	{
> 		paramvalue[k] = '\0';
> 		k++;
> 	}
> 	i = 0;
> 	// pass paramname into params and null rest of that string
> 	while (paramname[i] != '\0')
> 	{
> 		params[nbparams][i] = paramname[i];
> 		i++;
> 	}
> 	nbparams++;
> 	i = 0;
> 	// pass paramvalue into params and null rest of that string
> 	while (paramvalue[i] != '\0')
> 	{
> 		params[nbparams][i] = paramvalue[i];
> 		i++;
> 	}
> 	nbparams++;
> 	return (1);
> }
> 
> EXSLT_API int ClearParms(void)
> {
> 	int i, j;
> 	nbparams = 0;
> 	for (i = 0; i < 100; i++)
> 	{
> 		for (j = 0; j < 512; j++)
> 		{
> 			params[i][j] = '\0';
> 		}
> 	}
> 	return (0);
> }
> 
> EXSLT_API int exslttransform(const char* xmlstring, const 
> char* xsltstring,
> const char* resultfile)
> {
> 	xsltStylesheetPtr cur = NULL;
> 	xmlDocPtr doc, res, dxsl;
> 	int i;
> 	const char *zparams[100 + 1];
> 	int nbzparams;
> 	nbzparams = 0;
> 	i = 0;
> 	while (i < nbparams)
> 	{
> 		zparams[i] = strdup((const char *)&params[i]);
> 		i++;
> 	}
> 	zparams[i] = NULL;
> 	exsltRegisterAll();
> 	xmlInitParser();
> 	xmlSubstituteEntitiesDefault(1);
> 	dxsl = xmlParseMemory(xsltstring, (int)strlen(xsltstring));
> 	cur = xsltParseStylesheetDoc(dxsl);
> 	doc = xmlParseMemory(xmlstring, (int)strlen(xmlstring));
> 	res = xsltApplyStylesheet(cur, doc, zparams);
> 	xsltSaveResultToFilename((const char*) resultfile, res, cur, 0);
> 	xsltFreeStylesheet(cur);
> 	//for (i = 0;i < nbparams;i++)
> 		//xmlFree(zparams[i]);
> 	xmlFreeDoc(res);
> 	xmlFreeDoc(doc);
> 	xsltCleanupGlobals();
> 	xmlCleanupParser();
> 	return(0);
> }
> 
> EXSLT_API int exslttransformxmlfile(const char* xmlfile, const char*
> xsltstring, const char* resultfile)
> {
> 	xsltStylesheetPtr cur = NULL;
> 	xmlDocPtr doc, res, dxsl;
> 	int i;
> 	const char *zparams[100 + 1];
> 	int nbzparams;
> 	nbzparams = 0;
> 	i = 0;
> 	while (i < nbparams)
> 	{
> 		zparams[i] = strdup((const char *)&params[i]);
> 		i++;
> 	}
> 	zparams[i] = NULL;
> 	exsltRegisterAll();
> 	xmlInitParser();
> 	xmlSubstituteEntitiesDefault(1);
> 	dxsl = xmlParseMemory(xsltstring, (int)strlen(xsltstring));
> 	cur = xsltParseStylesheetDoc(dxsl);
> 	doc = xmlParseFile(xmlfile);
> 	res = xsltApplyStylesheet(cur, doc, zparams);
> 	xsltSaveResultToFilename((const char*) resultfile, res, cur, 0);
> 	xsltFreeStylesheet(cur);
> 	//for (i = 0;i < nbparams;i++)
> 		//xmlFree(zparams[i]);
> 	xmlFreeDoc(res);
> 	xmlFreeDoc(doc);
> 	xsltCleanupGlobals();
> 	xmlCleanupParser();
> 	return(0);
> }
> 
> 
> _______________________________________________
> xml mailing list, project page  http://xmlsoft.org/
> xml gnome org
> http://mail.gnome.org/mailman/listinfo/xml
> 
> 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]