from lxml.etree import Element, SubElement, tostring def generate(transformed_metadata): root = Element('{http://ddex.net/xml/mlc/131}DeclarationOfSoundRecordingRightsClaimMessage', {'LanguageAndScriptCode': 'en'}) message_header = SubElement(root, '{}MessageHeader') # is empty xmlns necessary? message_thread_id = SubElement(message_header, 'MessageThreadId') message_thread_id.text = '2538381' message_id = SubElement(message_header, 'MessageId') message_id.text = '2538381_20190205_141524' # Message sender message_sender = SubElement(message_header, 'MessageSender') party_id = SubElement(message_sender, 'PartyId') party_id.text = 'PADPIDA2012041004F' party_name = SubElement(message_sender, 'PartyName') full_name = SubElement(party_name, 'FullName') full_name.text = 'The Orchard Enterprises' trading_name = SubElement(message_sender, 'TradingName') trading_name.text = 'The Orchard Enterprises, LLC' # Message recipient message_recipient = SubElement(message_header, 'MessageRecipient') recipient_party_id = SubElement(message_recipient, 'PartyId') recipient_party_id.text = 'PADPIDA2013040801U' recipient_party_name = SubElement(message_recipient, 'PartyName') recipient_full_name = SubElement(recipient_party_name, 'FullName') recipient_full_name.text = 'GVL' # Message created date time message_created_date_time = SubElement(message_header, 'MessageCreatedDateTime') message_created_date_time.text = '2019-02-05T14:15:24Z' ##################### resource_list = SubElement(root, 'ResourceList', {'xmlns': ''}) sound_recording = SubElement(resource_list, 'SoundRecording', {'LanguageAndScriptCode': 'en'}) sound_recording_type = SubElement(sound_recording, 'SoundRecordingType') sound_recording_type.text = 'MusicalWorkSoundRecording' is_artist_related = SubElement(sound_recording, 'IsArtistRelated') is_artist_related.text = 'true' sound_recording_id = SubElement(sound_recording, 'SoundRecordingId') isrc = SubElement(sound_recording_id, 'ISRC') isrc.text = transformed_metadata['tracks'][0]['isrc'] resource_reference = SubElement(sound_recording, 'ResourceReference') resource_reference.text = 'A1' reference_title = SubElement(sound_recording, 'ReferenceTitle') title_text = SubElement(reference_title, 'TitleText') title_text.text = transformed_metadata['tracks'][0]['trackName'] sub_title = SubElement(reference_title, 'SubTitle') sub_title.text = '' is_bonus_resource = SubElement(sound_recording, 'IsBonusResource') is_bonus_resource.text = 'false' language_of_performance = SubElement(sound_recording, 'LanguageOfPerformance') language_of_performance.text = transformed_metadata['tracks'][0]['metaLanguageCode'] # print(tostring(root, pretty_print=True, xml_declaration=True, encoding='utf-8').decode('utf-8')) return root