使用Python解析包含HTML内容的XML文件

3

我使用API获取一些XML文件,但其中一些文件包含HTML标签,而没有转义它们。例如,<br><b></b>

我使用此代码来读取它们,但带有HTML的文件会引发错误。我无法手动更改所有文件。有没有办法解析文件而不丢失HTML标签?

from xml.dom.minidom import parse, parseString

xml = ...#here is the api to receive the xml file
dom = parse(xml)
strings = dom.getElementsByTagName("string")

在解析XML之前,将<br>替换为<br />如何?我不明白<b></b>有什么问题?此外,考虑使用ElementTree而不是minidom;minidom可能会导致内存泄漏。 - Aran-Fey
xml变量是一个文件路径。那么,在解析之前如何替换标签呢?你能否给出一个使用ElementTree和替换的代码示例作为答案,以查看其是否有效并接受你的解决方案? - Tasos
2个回答

2

将 XML 文件作为字符串读取,并在解析之前修复格式错误的标签:

import xml.etree.ElementTree as ET

with open(xml) as xml_file: # open the xml file for reading
    text= xml_file.read() # read its contents
text= text.replace('<br>', '<br />') # fix malformed tags
document= ET.fromstring(text) # parse the string
strings= document.findall('string') # find all string elements

由于某种我无法理解的原因,如果我使用 text = text.replace('<br>', '<br />'),标签后面的字符串就会消失。如果我使用 text = text.replace('<br>', ""),所有的字符串都在那里,但显然没有换行符。 - Tasos

2
如果您可以使用第三方库,我建议您使用Beautiful Soup,它可以处理XML和HTML,还可以解析损坏的标记,并提供易于使用的API。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接