You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用xmltodict.parse处理不可打印数据?

处理含不可打印字符的XML(基于xmltodict)

你遇到的ExpatError是因为XML 1.0标准禁止包含大部分ASCII控制字符(比如你的代码里的\x08退格符),而xmltodict默认使用的expat解析器严格遵循XML 1.0规范,所以会报错。下面提供两种解决方案:

方案一:预处理XML,过滤非法控制字符

如果不需要保留这些不可打印字符,可以先清理XML字符串,仅保留XML 1.0允许的控制字符(\t、\n、\r),移除其余非法控制字符:

import xmltodict
import re

def clean_invalid_xml_chars(xml_str):
    # 正则匹配并移除所有XML 1.0禁止的控制字符
    return re.sub(r'[\x00-\x08\x0b\x0c\x0e-\x1f]', '', xml_str)

# 原始XML字符串
raw_xml = '<a>as\x08</a>'
# 清理后解析
cleaned_xml = clean_invalid_xml_chars(raw_xml)
result = xmltodict.parse(cleaned_xml)
print(result)  # 输出: {'a': 'as'}

方案二:切换到XML 1.1模式解析(保留不可打印字符)

如果需要完整保留原始的不可打印字符,可以自定义expat解析器,切换到XML 1.1模式(该标准允许更多控制字符),再传给xmltodict:

import xmltodict
import xml.parsers.expat

# 创建遵循XML 1.1规范的expat解析器
parser = xml.parsers.expat.ParserCreate()
parser.xml_version = "1.1"

# 使用自定义解析器解析XML
raw_xml = '<a>as\x08</a>'
result = xmltodict.parse(raw_xml, expat=parser)
print(result)  # 输出: {'a': 'as\x08'}

内容的提问来源于stack exchange,提问作者python3.789

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:10:24