from lxml.etree import Element, SubElement, tostring from validate import validate_rdr 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 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' print(tostring(root, pretty_print=True, xml_declaration=True, encoding='utf-8').decode('utf-8')) validate_rdr(root)