使用ElementTree解析带有特殊字符的XML

时间:2017-01-31 19:36:03

标签: python xml elementtree

我尝试使用ElementTree解析的GET服务,其内容我无法控制,包含非UTF8特殊字符:

respXML = response.content.decode("utf-8")

respRoot = ET.fromstring(respXML)

第二行抛出

  

xml.etree.ElementTree.ParseError:对无效字符编号的引用:第3591行,第39栏

如何判断XML是否会被解析,而不管字符集如何,如果我发现非法字符,我可以在以后运行替换?例如,是否有包含所有内容的编码?我知道我可以搜索并替换输入的XML字符串,但我更愿意先解析它,因为我的解析会将其转换为更易于搜索的数据结构。

有问题的特殊字符是&#25;,但我希望能够摄取任何字符。整个标记为<literal>Alzheimer&#25;s disease</literal>

1 个答案:

答案 0 :(得分:2)

在@tdelaney的帮助下,我能够通过将输入XML刷新为字符串来克服这个障碍:

respXML = response.content.decode("utf-8")

scrubbedXML = re.sub('&.+[0-9]+;', '', respXML)

respRoot = ET.fromstring(scrubbedXML)