You need to enable JavaScript to run this app. Python解析带xmlns的FHIR Binary响应 提取base64内容存为本地Word文档
优惠活动
大模型
产品
解决方案
定价
更多

Python解析带xmlns的FHIR Binary响应 提取base64内容存为本地Word文档

问题核心原因
  • 此前解析失败的核心原因:FHIR返回的XML带有默认命名空间http://hl7.org/fhir,字符串拆分容易截断长base64内容,直接用ElementTree查找不带命名空间的<content>节点无法匹配到目标值。
  • 临时写文件的问题:写入的是XML格式文本,并非Word文件的二进制数据,Word无法识别自然会出现格式异常。
可行实现方案(Python)

用标准库xml.etree.ElementTree做命名空间感知解析,提取base64值后解码写文件,完整代码如下:

import xml.etree.ElementTree as ET
import base64

# 接口返回的XML字节串
xml_response = response.content
# 解析XML根节点
root = ET.fromstring(xml_response)
# 声明FHIR命名空间映射,解决节点匹配不到的问题
ns = {"fhir": "http://hl7.org/fhir"}

# 提取contentType,可自动识别文件类型
content_type = root.find("fhir:contentType", ns).attrib["value"]
# 提取content节点的base64值,清理所有空白字符(避免XML格式化换行导致解码失败)
base64_str = "".join(root.find("fhir:content", ns).attrib["value"].split())
# 解码得到真实文件二进制
file_binary = base64.b64decode(base64_str)

# 按MIME类型匹配后缀,写入本地文件
suffix_map = {
    "application/msword": "doc",
    "application/vnd.openxmlformats-officedocument.wordprocessingml.document": "docx"
}
file_suffix = suffix_map.get(content_type, "bin")
with open(f"/tmp/metadata.{file_suffix}", "wb") as f:
    f.write(file_binary)
关键注意事项
  • 必须在节点查找时带上FHIR命名空间,直接写root.find("content")会返回空,这是此前解析失败的核心原因。
  • 提取base64值后必须清理所有空白字符:FHIR序列化XML时可能会把长base64内容拆成多行,属性值中会混入换行、缩进,不清理会直接导致base64解码报错。
  • 不要直接把接口响应的XML内容写入文件,必须经过base64解码后才是真实的文件二进制数据。

内容的提问来源于stack exchange,提问作者Iain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 14:36:00