Python анализирует двоичный документ из xmlns и сохраняет локально

#python #xml #request #binary #xml-namespaces

Вопрос:

Итак, у меня есть ответ на запрос, подобный этому:

 resourceType": "Binary",
"id": "07a6483f-732b-461e-86b6-edb665c45510",
"contentType": "application/msword",
"content": "UEsDBBQA.......
 

И это отображается в моем коде как:

 b'<Binary xmlns="http://hl7.org/fhir">rn   <id value="07a6483f-732b-461e-86b6-edb665c45510"></id>rn   <contentType value="application/msword"></contentType>rn   <content value="UEsDBBQ
 

Мне нужно извлечь значение содержимого и сохранить как, в данном случае, документ Word. Я пробовал решения, основанные на разделении и использовании ElementTree, но, похоже, я не могу проанализировать содержимое и сохранить его в виде файла word.

Прямо сейчас просто делаю это:

 with open('/tmp/metadata.doc', 'wb') as f:
    f.write(response.content
 

Приводит к записи всего фрагмента, и Word открывается следующим образом:

введите описание изображения здесь

Есть какие-нибудь идеи? Заранее спасибо

Ответ №1:

Учитывая, что response.content это строковая переменная, XML может быть проанализирован с помощью ElementTree:

 from xml.etree import ElementTree as etree

# declare namespace
ns = {'ns': 'http://hl7.org/fhir'}
# parse XML
tree = etree.fromstring(response.content)
# find content element considering namespace
content_element = tree.find('.//ns:content', ns)
# extract attribute "value"
content = content_element.get('value')
# save content to file
 

Комментарии:

1. Спасибо. Совершенство, которое я очень ценю!