如何解析包含HTML实体的XML?

时间:2016-01-29 20:36:39

标签: python xml python-2.7

我有一个脚本,它将XML作为字符串,并尝试使用xml

解析它

以下是我正在使用的代码

的示例
from xml.etree.ElementTree import fromstring
my_xml = """
    <documents>
          <record>Hello< &O >World</record>
    </documents>
"""
xml = fromstring(my_xml)

当我运行代码时,我得到ParseError

Traceback (most recent call last):
  File "C:/Code/Python/xml_convert.py", line 7, in <module>
    xml = fromstring(my_xml)
  File "C:\Python27\lib\xml\etree\ElementTree.py", line 1300, in XML
    parser.feed(text)
  File "C:\Python27\lib\xml\etree\ElementTree.py", line 1642, in feed
    self._raiseerror(v)
  File "C:\Python27\lib\xml\etree\ElementTree.py", line 1506, in _raiseerror
    raise err
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 3, column 18

正如Invalid Characters in XML中所述,这是由于拥有HTML实体<>&

我如何处理这些实体,以便XML将它们作为纯文本读取?

2 个答案:

答案 0 :(得分:3)

您可以将lxml Parser与) AS B标志一起使用:

recover=True

答案 1 :(得分:0)

你不能做你所要求的。您的文档不是格式良好的XML,任何符合要求的XML解析器都会拒绝它。

您可以编写使用正则表达式来修复它并使其成为XML的代码,但任何此类解决方案几乎肯定会出错并且容易出错并导致比它解决的问题更多的问题。

如果你真的,真的无法在源头解决这个问题,那么文档格式正确,那么你最好的选择就是用人工智能手动修复它们。