diff --git a/product/ERP5Type/Base.py b/product/ERP5Type/Base.py index 6243344ea6e1e2bb72d2de8b71b4e260d2ad7d73..f77b112a3f34f357343e7bfdd982c5ad59534ad0 100644 --- a/product/ERP5Type/Base.py +++ b/product/ERP5Type/Base.py @@ -2817,11 +2817,11 @@ class Base( CopyContainer, self.reindexObject(*args, **kw) security.declareProtected( Permissions.AccessContentsInformation, 'asXML' ) - def asXML(self): + def asXML(self, root=None): """ Generate an xml text corresponding to the content of this object """ - return Base_asXML(self) + return Base_asXML(self, root=root) # Optimized Menu System security.declarePublic('allowedContentTypes') diff --git a/product/ERP5Type/Core/Folder.py b/product/ERP5Type/Core/Folder.py index f20f81d405ab849fb2cd8c3d1cfc557da6a1e2cf..07691399a4a85d64337b09b420e0a681dd3dcb71 100644 --- a/product/ERP5Type/Core/Folder.py +++ b/product/ERP5Type/Core/Folder.py @@ -1224,11 +1224,11 @@ class Folder(CopyContainer, CMFBTreeFolder, CMFHBTreeFolder, Base, FolderMixIn, return error_list security.declareProtected(Permissions.AccessContentsInformation, 'asXML') - def asXML(self, omit_xml_declaration=True): + def asXML(self, omit_xml_declaration=True, root=None): """ Generate an xml text corresponding to the content of this object """ - return Folder_asXML(self, omit_xml_declaration=omit_xml_declaration) + return Folder_asXML(self, omit_xml_declaration=omit_xml_declaration, root=root) # Optimized Menu System security.declarePublic('getVisibleAllowedContentTypeList') diff --git a/product/ERP5Type/XMLExportImport.py b/product/ERP5Type/XMLExportImport.py index 61932c413c1f00a32b59b51c84394486e29f14b2..f57410ed6f08e4806a31b006740a5ef7b4cfc027 100644 --- a/product/ERP5Type/XMLExportImport.py +++ b/product/ERP5Type/XMLExportImport.py @@ -98,8 +98,7 @@ def Base_asXML(object, root=None): ascii_data = msg.get_payload() sub_object.text = ascii_data elif prop_type in ('lines', 'tokens',): - value_as_node = etree.XML(marshaler(value)) - sub_object.append(value_as_node) + sub_object.text = etree.CDATA(marshaler(value)) elif prop_type in ('text', 'string',): sub_object.text = unicode(escape(value), 'utf-8') elif prop_type != 'None': @@ -132,43 +131,41 @@ def Base_asXML(object, root=None): for user_role in self.get_local_roles(): local_role_node = SubElement(object, 'local_role', attrib=dict(id=user_role[0], type='tokens')) - role_list_node = etree.XML(marshaler(user_role[1])) - local_role_node.append(role_list_node) + local_role_node.text = etree.CDATA(marshaler(user_role[1])) if getattr(self, 'get_local_permissions', None) is not None: for user_permission in self.get_local_permissions(): local_permission_node = SubElement(object, 'local_permission', attrib=dict(id=user_permission[0], type='tokens')) - permission_list_node = etree.XML(marshaler(user_permission[1])) - local_permission_node.append(permission_list_node) + local_permission_node.text = etree.CDATA(marshaler(user_permission[1])) # Sometimes theres is roles specified for groups, like with CPS if getattr(self, 'get_local_group_roles', None) is not None: for group_role in self.get_local_group_roles(): local_group_node = SubElement(object, 'local_group', attrib=dict(id=group_role[0], type='tokens')) - group_role_node = etree.XML(marshaler(group_role[1])) - local_group_node.append(group_role_node) + local_group_node.text = etree.CDATA(marshaler(group_role[1])) if return_as_object: return root return etree.tostring(root, encoding='utf-8', xml_declaration=True, pretty_print=True) -def Folder_asXML(object, omit_xml_declaration=True): +def Folder_asXML(object, omit_xml_declaration=True, root=None): """ Generate an xml text corresponding to the content of this object """ xml_declaration = not omit_xml_declaration from Products.ERP5Type.Base import Base self = object - root = Element('erp5') + if root is None: + root = Element('erp5') Base_asXML(self, root=root) - root_node = root.xpath('/erp5/object')[0] + root_node = root.find('object') # Make sure the list of sub objects is ordered id_list = sorted(self.objectIds()) # Append to the xml the xml of subobjects for id in id_list: o = self._getOb(id) if issubclass(o.__class__, Base): - Base_asXML(o, root=root_node) + o.asXML(root=root_node) return etree.tostring(root, encoding='utf-8', xml_declaration=xml_declaration, pretty_print=True)