1
0
mirror of https://gitlab.gnome.org/GNOME/libxslt synced 2025-07-29 15:41:13 +03:00

applied a patch from Ralf Mattes providing style.saveResultToString()

* python/libxslt-python-api.xml python/libxslt.c
  python/libxsltclass.txt python/tests/basic.py: applied a patch
  from Ralf Mattes providing style.saveResultToString()
Daniel
This commit is contained in:
Daniel Veillard
2002-08-25 15:04:00 +00:00
parent c1d306b3c3
commit f015c8f98c
6 changed files with 67 additions and 6 deletions

View File

@ -5,6 +5,12 @@
</file>
</files>
<symbols>
<function name='xsltSaveResultToString' file='python'>
<info>Have the stylesheet serialize the result of a transformation to a python string</info>
<return type='char *' info='The result document as a string' />
<arg name='style' type='xsltStylesheetPtr' info='a parsed XSLT stylesheet'/>
<arg name='result' type='xmlDocPtr' info='The result document'/>
</function>
<function name='xsltApplyStylesheet' file='python'>
<info>Apply the stylesheet to the document</info>
<return type='xmlDocPtr' info="the result document or NULL in case of error"/>

View File

@ -251,6 +251,49 @@ libxslt_xsltApplyStylesheet(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
return(py_retval);
}
PyObject *
libxslt_xsltSaveResultToString(PyObject *self, PyObject *args) {
PyObject *py_retval; /* our final return value, a python string */
xmlChar *buffer;
xmlChar *tmp;
int size = 0;
int emitted = 0;
xmlDocPtr result;
PyObject *pyobj_result;
xsltStylesheetPtr style;
PyObject *pyobj_style;
if (!PyArg_ParseTuple(args, (char *)"OO:xsltSaveResultToString", &pyobj_style, &pyobj_result))
goto FAIL;
result = (xmlDocPtr) PyxmlNode_Get(pyobj_result);
style = (xsltStylesheetPtr) Pystylesheet_Get(pyobj_style);
/* FIXME: We should probably add more restrictive error checking
* and raise an error instead of "just" returning NULL.
* FIXME: Documentation and code for xsltSaveResultToString diff
* -> emmitted will never be positive non-null.
*/
emitted = xsltSaveResultToString(&buffer, &size, result, style);
if(!buffer || emitted < 0)
goto FAIL;
/* We haven't tested the aberrant case of a transformation that
* renders to an empty string. For now we try to play it save.
*/
if(size)
{
buffer[size] = '\0';
py_retval = PyString_FromString((char *) buffer);
xmlFree(buffer);
}
else
py_retval = PyString_FromString("");
return(py_retval);
FAIL:
return(0);
}
/************************************************************************
* *
* Error message callback *

View File

@ -184,6 +184,7 @@ Class stylesheet()
# functions from module python
applyStylesheet()
saveResultToString()
# functions from module transform
newTransformContext()

View File

@ -1,4 +1,5 @@
#!/usr/bin/python -u
import sys
import libxml2
import libxslt
@ -11,6 +12,10 @@ style = libxslt.parseStylesheetDoc(styledoc)
doc = libxml2.parseFile("test.xml")
result = style.applyStylesheet(doc, None)
style.saveResultToFilename("foo", result, 0)
stringval = style.saveResultToString(result)
if (len(stringval) != 68):
print "Error in saveResultToString"
sys.exit(255)
style.freeStylesheet()
doc.freeDoc()
result.freeDoc()