首页 > 解决方案 > 使用 requests 模块从 xml 文件中获取单个标签的内容

问题描述

我使用以下代码使用 python requests 模块向soap服务发出请求:

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>是一个 base64 编码的 csv 文件。我编写响应的代码是:

with open ('test.csv','wb') as f:
    f.write (response.content)

那显然要写整个xml...如何只取<aa:File> base64Binary </aa:File>内容?

标签: pythonxmlpython-3.x

解决方案


像这样的东西会是解决方案吗?

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 "

推荐阅读