Я делаю запрос с модулем запросов python к службе мыла с этим кодом:
response = requests.get(url,data=body,headers=headers)
и служба вернет этот xml в качестве ответа:
<?xml version = "1.0" encoding = "utf-8"?>
<soap:Envelope xmlns:soap = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:aa = "example.com/api"><soap:Body>
<aa:GetStockFileResponse> GetStockFileResponseType
<aa:TestMode> boolean </aa:TestMode>
<aa:Errors> ArrayOfError
<aa:Error> Error
<aa:Code> int </aa:Code>
<aa:Description> string </aa:Description>
</aa:Error>
</aa:Errors>
<aa:Warnings> ArrayOfWarning
<aa:Warning> Warning
<aa:Code> int </aa:Code>
<aa:Description> string </aa:Description>
</aa:Warning>
</aa:Warnings>
<aa:StockFileFormat> StockFileFormat (string) </aa:StockFileFormat>
<aa:FieldDelimiter> StringLength1 (string) </aa:FieldDelimiter>
<aa:File> base64Binary </aa:File>
</aa:GetStockFileResponse>
</soap:Body></soap:Envelope>
Мне нужно записать в файл csv содержимое <aa:File> base64Binary </aa:File>
, то есть файл csv с кодировкой base64.
Мой код для написания ответа:
with open ('test.csv','wb') as f:
f.write (response.content)
которые явно пишут весь xml ...
Как брать только контент <aa:File> base64Binary </aa:File>
?
Что-то вроде этого было бы решением?
import re
xmlText = '<foo>Foo</foo><aa:File> base64Binary </aa:File><bar>Bar</bar>'
# Target to extract: " base64Binary "
content = re.findall(r'<aa:File>(.+?)</aa:File>', xmlText)
print(content) # outputs " base64Binary "
Обратите внимание, что ответы только на код не приветствуются.
Я думаю, лучше использовать парсер, как сказал @bruno desthuilliers. Я пытаюсь решить с помощью xml.etree.ElementTree, любые предложения приветствуются
Это проблема синтаксического анализа xml и не имеет ничего общего с запросами python. Любой синтаксический анализатор xml решит вашу проблему, поэтому выберите один и используйте его.