Python 使用ElementTree解析带有特殊字符的XML
我尝试使用Python 使用ElementTree解析带有特殊字符的XML,python,xml,elementtree,Python,Xml,Elementtree,我尝试使用ElementTree解析的GET服务包含一个非UTF8特殊字符,我不控制该服务的内容: respXML = response.content.decode("utf-8") respRoot = ET.fromstring(respXML) 第二行抛出 xml.etree.ElementTree.ParseError:对无效字符号的引用:第3591行第39列 我如何确保不管字符集是什么,都能解析XML,如果我发现非法字符,我可以在以后运行替换?例如,是否存在包含所有内容的编码?我
ElementTree
解析的GET服务包含一个非UTF8特殊字符,我不控制该服务的内容:
respXML = response.content.decode("utf-8")
respRoot = ET.fromstring(respXML)
第二行抛出
xml.etree.ElementTree.ParseError:对无效字符号的引用:第3591行第39列
我如何确保不管字符集是什么,都能解析XML,如果我发现非法字符,我可以在以后运行替换?例如,是否存在包含所有内容的编码?我知道我可以搜索和替换输入XML字符串,但我更愿意首先解析它,因为我的解析将其转换为更易于搜索的数据结构
所讨论的特殊字符是
代码>但我希望能够摄取任何角色。整个标签是Alzheimer;s disease
在@tdelaney的帮助下,我通过将输入XML作为字符串擦洗,克服了这个障碍:
respXML = response.content.decode("utf-8")
scrubbedXML = re.sub('&.+[0-9]+;', '', respXML)
respRoot = ET.fromstring(scrubbedXML)
第3591行是什么?我刚刚编辑了问题,看到最后一句了吗?不是编码。。。它是和#25代码>unicode实体引用这就是问题所在。我不知道如何将外部实体添加到ElementTree中
(其中d是十进制数字)解码为unicode,该字符表示“媒体结尾”字符,该字符不是有效的xml。我唯一能想到的就是用替换它代码>在将其传递给ET之前。这是插入之前进行清理的一个很好的参数!这可能是某种编码不匹配,例如mbcs被发布到假定的utf-8条目。