ERP5OOo: don't fail exporting documents with control character
if for some reason an ERP5 document has some control characters in title of description and is exported in ODS/ODT, the export will fail with an etree error like this:
Exception:
Module Products.CMFActivity.ActivityTool, line 356, in __call__
result = method(*self.args, **self.kw)
Module Products.ERP5Type.patches.PythonScript, line 179, in __call__
return self._orig_bindAndExec(args, kw, None)
Module Shared.DC.Scripts.Bindings, line 359, in _bindAndExec
return self._exec(bound_data, args, kw)
Module Products.PythonScripts.PythonScript, line 344, in _exec
result = f(*args, **kw)
Module script, line 15, in Base_renderSimpleView
- <PythonScript at /erp5/Base_renderSimpleView used for /erp5/sale_packing_list_module>
- Line 15
report_data = getattr(context, deferred_style_dialog_method)(**params)
Module AccessControl.ZopeGuards, line 369, in guarded_apply
return builtin_guarded_apply(func, args, kws)
Module AccessControl.ZopeGuards, line 391, in builtin_guarded_apply
return func(*arglist, **argdict)
Module Products.ERP5Form.Form, line 705, in __call__
return pt.pt_render(extra_context=extra_context)
Module Products.ERP5OOo.OOoTemplate, line 484, in pt_render
extra_context, request)
Module Products.ERP5OOo.OOoTemplate, line 422, in renderIncludes
xml_doc = etree.XML(text)
Module lxml.etree, line 3192, in lxml.etree.XML (src/lxml/lxml.etree.c:78763)
Module lxml.etree, line 1848, in lxml.etree._parseMemoryDocument (src/lxml/lxml.etree.c:118341)
Module lxml.etree, line 1736, in lxml.etree._parseDoc (src/lxml/lxml.etree.c:117021)
Module lxml.etree, line 1102, in lxml.etree._BaseParser._parseDoc (src/lxml/lxml.etree.c:111265)
Module lxml.etree, line 595, in lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:105109)
Module lxml.etree, line 706, in lxml.etree._handleParseResult (src/lxml/lxml.etree.c:106817)
Module lxml.etree, line 635, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:105671)
XMLSyntaxError: PCDATA invalid Char value 20, line 228761, column 21 (line 228761)
This is because XML does not accept the full range of characters, there are a few characters that are not allowed.
To prevent these errors, we replace these invalid characters by an error character (�) before manipulating the XML with lxml.