code: def export(self, validate=True):
          
          self._finalize_batch()
  
          ctrl_sum_total = 0
          nb_of_txs_total = 0
  
          for ctrl_sum in self._xml.iter('CtrlSum'):
              if ctrl_sum.text is None:
                  continue
              ctrl_sum_total += decimal_str_to_int(ctrl_sum.text)
  
          for nb_of_txs in self._xml.iter('NbOfTxs'):
              if nb_of_txs.text is None:
                  continue
              nb_of_txs_total += int(nb_of_txs.text)
  
          n = self._xml.find(self.root_el)
          GrpHdr_node = n.find('GrpHdr')
          CtrlSum_node = GrpHdr_node.find('CtrlSum')
          NbOfTxs_node = GrpHdr_node.find('NbOfTxs')
          CtrlSum_node.text = int_to_decimal_str(ctrl_sum_total)
          NbOfTxs_node.text = str(nb_of_txs_total)
  
          # Prepending the XML version is hacky, but cElementTree only offers this
          # automatically if you write to a file, which we don't necessarily want.
          out = b"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + ET.tostring(
              self._xml, "utf-8")
          if validate and not is_valid_xml(out, self.schema):
              raise ValidationError(
                  "The output SEPA file contains validation errors. This is likely due to an illegal value in one of "
                  "your input fields."
              )
          return out
docs: Method to output the xml as string. It will finalize the batches and
          then calculate the checksums (amount sum and transaction count),
          fill these into the group header and output the XML.