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.