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:
@ -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"/>
|
||||
|
@ -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 *
|
||||
|
@ -184,6 +184,7 @@ Class stylesheet()
|
||||
|
||||
# functions from module python
|
||||
applyStylesheet()
|
||||
saveResultToString()
|
||||
|
||||
# functions from module transform
|
||||
newTransformContext()
|
||||
|
@ -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()
|
||||
|
Reference in New Issue
Block a user